代码之家  ›  专栏  ›  技术社区  ›  StormianRootSolver

工作流基础:异步操作(冗长的网络I/O)

  •  1
  • StormianRootSolver  · 技术社区  · 16 年前

    我必须创建一个每天启动几次的应用程序(它是非交互式的)。

    要操作,它需要通过相当慢的连接从Internet(兆字节)获取大量数据,因此WCF服务调用需要相当长的时间。

    同时,它需要执行本地计算,并具有复杂的初始化过程。

    所以,我要做的是创建一个工作流,在本地初始化/计算时异步获取数据(需要几分钟)。

    有办法做到这一点吗?

    2 回复  |  直到 16 年前
        1
  •  1
  •   Chad    16 年前

    你可以用 BackgroundWorker 每个异步操作的组件—一个用于计算,一个用于数据下载。

    我的建议是每个操作使用一个线程。启动每个线程后,调用 thread.Join() 每个线程一个,等待每个线程完成。

    例如

    Thread[] workers = new Thread[2];
    workers[0] = new Thread(dataDownloader.Fetch);
    workers[1] = new Thread(calculator.DoComplexCalculations);
    
    foreach(Thread t in workers)
    {
       t.Start();
    }
    foreach(Thread t in workers)
    {
       t.Join();
    }
    
        2
  •  1
  •   Toad    16 年前

    您可以生成WCF服务的异步类(使用commandlinetool)。如果运行这些异步方法,它们将立即返回,并在完成后调用回调委托。这样,您可以在等待时自由地进行所有计算。

    推荐文章