C# .Net async ForEach()委托引发已取消的任务异常

C# .Net async ForEach()委托引发已取消的任务异常,c#,.net,asynchronous,C#,.net,Asynchronous,我有以下c#代码: 有时我会收到TaskCancelledException 为什么会发生这种情况?ForEach中的委托类型是操作 Action的返回类型是void,这意味着您的异步项=> 等待剂量测定(项目)lambda转换为 async void doSomething(T项)。将async与void一起使用意味着它将被异步调用,并且不会在下一次迭代发生之前等待 您应该始终将async与Task返回类型一起使用 在本例中,您应该使用常用的foreach 因此,您的示例如下所示: forea

我有以下c#代码:

有时我会收到TaskCancelledException


为什么会发生这种情况?

ForEach中的委托类型是
操作

Action
的返回类型是
void
,这意味着您的
异步项=>
等待剂量测定(项目)
lambda转换为

async void doSomething(T项)
。将
async
void
一起使用意味着它将被异步调用,并且不会在下一次迭代发生之前等待

您应该始终将
async
Task
返回类型一起使用

在本例中,您应该使用常用的
foreach

因此,您的示例如下所示:

foreach(var item in list) 
{
  await doSomething(item);
}

不要这样做
List.ForEach()
不支持异步。有关如何正确执行此操作的更多信息,请参阅
foreach(var item in list) 
{
  await doSomething(item);
}