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

如何在C#中运行多个任务?,c#,parallel-processing,task,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();

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

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

    await Task.Run( async () =>
    {
        // do some downloading and processing work here
        await DoSomethingAsync();
    }
}
我还需要使中断和停止过程成为可能。因为我的DoSomethingAsync方法读取标记(一个全局布尔值)以停止进程


谢谢

不,这不会同时运行它们-您正在等待每一个都完成,然后再开始下一个

您可以将每个
任务的结果放入一个集合中,然后在启动后等待


(遗憾的是,
并行。ForEach
没有返回您可以等待的
任务。
可能会有一个更异步友好的版本…

这将同时处理项目

  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();

有关详细信息,请参阅(除其他来源外)

对不起,我在该任务中等待。忘了把它放进去。那我怎么解决这个问题呢?谢谢。@Jon:
并行。ForEach
使用调用线程作为其并行线程之一,因此您可以通过将其包装在
任务中使其异步友好。Run
@Jerry:
任务。Run
将与异步lambda以及同步lambda(它将异步lambda展开)一起正常工作。因此,您仍然可以将结果放入收集中,然后等待
任务。Whalll
@StephenCleary:这一点很好-感觉有点恶心,但这比手动收集任务要好得多。抱歉,但是如何根据您提供的方法中断和停止该过程?因为我的DoSomethingAsync方法读取标记以停止进程。谢谢