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

Jer*_*rry 4 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Jon*_*eet 9

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

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

(这是一个耻辱Parallel.ForEach不返回Task,你可以等待,有可能是一个更异步的版本各地...)

  • @Jon:`Parallel.ForEach`使用调用线程作为其并行线程之一,因此您可以通过将其包装在`Task.Run`中使其异步友好. (2认同)
  • @Jerry:`Task.Run`将按预期使用异步lambda和同步lambda(它解包异步).因此,您仍然可以将结果放入集合中,然后等待`Task.WhenAll`. (2认同)