【发布时间】:2020-05-08 12:44:43
【问题描述】:
我有一个异步函数,我必须对列表的每个元素进行异步调用。为此,我编写了这段代码:
List<string> batchItems;
batchItems.ForEach(async t => await SubmitBatchItemAsync(input, t));
但是,这不起作用:调用了 SubmitBatchItemAsync,但没有等待。
我必须将此代码更改为此才能正常工作:
List<string> batchItems;
foreach (var batchItem in batchItems)
{
await SubmitBatchItemAsync(input, batchItem);
}
这也有效,但并不完全相同,因为 Task.Wait() 的工作方式与 await 不完全相同:
List<string> batchItems;
batchItems.ForEach(t => SubmitBatchItemAsync(input, t).Wait(CancellationToken.None));
有谁知道为什么第一个选项不起作用,因为 LINQ 表达式支持等待? (https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/lambda-expressions#async-lambdas)
【问题讨论】:
标签: c# foreach async-await wait