我必须创建一个将每天启动几次的应用程序(它是非交互式的)。Workflow Foundation:异步操作(冗长的网络I/O)
要运行,它需要来自Internet的大量数据(兆字节),而且通过相当慢的连接,所以WCF服务调用需要相当长的一段时间。
同时,它需要执行本地计算并具有复杂的初始化过程。
所以,我想要做的是创建一个工作流,异步提取数据(需要几分钟),而已经初始化/本地计算。
有没有办法做到这一点?
我必须创建一个将每天启动几次的应用程序(它是非交互式的)。Workflow Foundation:异步操作(冗长的网络I/O)
要运行,它需要来自Internet的大量数据(兆字节),而且通过相当慢的连接,所以WCF服务调用需要相当长的一段时间。
同时,它需要执行本地计算并具有复杂的初始化过程。
所以,我想要做的是创建一个工作流,异步提取数据(需要几分钟),而已经初始化/本地计算。
有没有办法做到这一点?
您可以对每个异步操作使用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();
}
您可以生成wcf服务的异步类(使用commandlinetool)。如果您运行这些异步方法,它们立即返回并在完成后调用回调委托。通过这种方式,您可以自由地在等待时进行所有计算