线程化2个进程并将结果数据与结果调用相结合的最佳方法是什么?我目前正在与2个Web服务连接。我想在一个线程中将一个Web服务A称为DataA。然后在另一个线程中为DataB调用Web服务B.然后,我需要从DataA和DataB检索特定信息以创建DataC。我还需要能够在任何时候取消整个过程。
我一直在研究使用ThreadPool但是没有办法取消任何ThreadPool线程。
更新:目前正在使用C#.NET 4.0
答案 0 :(得分:5)
我会使用任务并行库(TPL,http://msdn.microsoft.com/en-us/library/dd537609.aspx)
List<Data> GetData(CancellationToken cancel)
{
List<Data> dataA;
List<Data> dataB;
Task[] tasks = new Task[]
{
Task.Factory.StartNew(() => DataA()),
Task.Factory.StartNew(() => DataNB()),
};
Task.WaitAll(tasks, cancel); // Block until all tasks complete or cancelled.
if (cancellation.IsCancellationRequested)
return new List<Data>();
return dataA.Concat(dataB);
}
答案 1 :(得分:1)
在System.Threading命名空间中查看WaitHandle类。 WaitAll将允许阻塞,直到许多线程完成。