小编Jos*_*tro的帖子

在 List<>.ForEach 方法调用中的 LINQ 表达式中使用时,等待不等待

我有一个异步函数,我必须对列表的每个元素进行异步调用。为此,我编写了这段代码:

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

c# foreach wait async-await

1
推荐指数
1
解决办法
141
查看次数

标签 统计

async-await ×1

c# ×1

foreach ×1

wait ×1