如何在C#中运行多个任务?

时间:2012-09-06 08:47:44

标签: c# parallel-processing task

如何修改以下代码并使其同时运行多个任务?

foreach (SyndicationItem item in CurrentFeed.Items)
{
    if (m_bDownloadInterrupted)
    break;

    await Task.Run( async () =>
    {
        // do some downloading and processing work here
        await DoSomethingAsync();
    }
}

我还需要中断并尽可能地停止这个过程。因为我的DoSomethingAsync方法读取标记(一个全局布尔值)来停止进程。

由于

2 个答案:

答案 0 :(得分:9)

不,这不会同时运行它们 - 你在等待等待完成下一个之前完成它们。

您可以将每个Task.Run调用的结果放入一个集合中,然后在启动它们之后等待Task.WhenAll

(遗憾的是Parallel.ForEach没有返回你可以等待的Task。可能有一个更加异步友好的版本......)

答案 1 :(得分:1)

这将同时处理这些项目。

  Parallel.ForEach(CurrentFeed.Items, DoSomethingAsync)

为了取消你可能需要一个CancellationToken。

  CancellationTokenSource cts = new CancellationTokenSource();
  ParallelOptions po = new ParallelOptions();
  po.CancellationToken = cts.Token;

  // Add the ParallelOptions with the token to the ForEach call
  Parallel.ForEach(CurrentFeed.Items,po ,DoSomethingAsync)

  // set cancel on the token somewhere in the workers to make the loop stop
  cts.Cancel();

有关详细信息,请参阅(以及其他来源)http://msdn.microsoft.com/en-us/library/ee256691.aspx