我有以下c#代码:
list.ForEach(async item =>
await doSomething(item));
有时我收到TaskCancelledException。
为什么会这样?
答案 0 :(得分:0)
ForEach
内的委托类型为Action<T>
Action<T>
的返回类型为void
,表示您的async item =>
await doSomething(item)
lambda转化为
async void doSomething(T item)
。将async
与void
一起使用意味着它将被异步调用,而不会在下一次迭代发生之前等待。
您应始终将async
与Task
返回类型一起使用。
在此示例中,您应该使用常规的foreach
所以你的例子看起来像是:
foreach(var item in list)
{
await doSomething(item);
}