如何在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方法读取标记以停止进程。谢谢