2010-06-13 22 views
1

我必须创建一个将每天启动几次的应用程序(它是非交互式的)。Workflow Foundation:异步操作(冗长的网络I/O)

要运行,它需要来自Internet的大量数据(兆字节),而且通过相当慢的连接,所以WCF服务调用需要相当长的一段时间。

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

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

有没有办法做到这一点?

回答

1

您可以对每个异步操作使用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(); 
} 
1

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