在C#中线程化2个Web服务调用和组合结果数据的最佳方法是什么?

时间:2012-01-28 00:32:34

标签: c# multithreading

线程化2个进程并将结果数据与结果调用相结合的最佳方法是什么?我目前正在与2个Web服务连接。我想在一个线程中将一个Web服务A称为DataA。然后在另一个线程中为DataB调用Web服务B.然后,我需要从DataA和DataB检索特定信息以创建DataC。我还需要能够在任何时候取消整个过程。

我一直在研究使用ThreadPool但是没有办法取消任何ThreadPool线程。

更新:目前正在使用C#.NET 4.0

2 个答案:

答案 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将允许阻塞,直到许多线程完成。