Workflow Foundation:异步操作(冗长的网络I / O)

时间:2010-06-13 11:40:09

标签: c# asynchronous workflow-foundation

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

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

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

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

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您可以为每个异步操作使用BackgroundWorker组件 - 一个用于计算,另一个用于数据下载。

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

e.g。

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();
}