我必须创建一个每天都会启动几次的应用程序(它是非交互式的)。
要运行,它需要通过相当慢的连接从Internet(兆字节)获取大量数据,因此WCF服务调用需要相当长的时间。
同时,它需要执行本地计算并具有复杂的初始化过程。
所以,我想要做的是创建一个工作流,在本地初始化/计算的同时异步提取数据(需要几分钟)。
有没有办法实现这个目标?
答案 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();
}