我有一个异步函数,我必须对列表的每个元素进行异步调用。为此,我编写了这段代码:
List<string> batchItems;
batchItems.ForEach(async t => await SubmitBatchItemAsync(input, t));
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用:调用 SubmitBatchItemAsync,但不等待它。
我必须将此代码更改为此代码才能使其正常工作:
List<string> batchItems;
foreach (var batchItem in batchItems)
{
await SubmitBatchItemAsync(input, batchItem);
}
Run Code Online (Sandbox Code Playgroud)
这也有效,但并不完全相同,因为 Task.Wait() 与 await 的工作方式不同:
List<string> batchItems;
batchItems.ForEach(t => SubmitBatchItemAsync(input, t).Wait(CancellationToken.None));
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么第一个选项不起作用,因为 LINQ 表达式支持等待?(https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/lambda-expressions#async-lambdas)