如何等待Linq查询中的方法

c0D*_*g1c 16 linq async-await c#-5.0 windows-runtime winrt-async

试图awaitLINQ查询中使用关键字,我得到这个:

'await'运算符只能用在初始'from'子句的第一个集合表达式中的查询表达式中,或者用在'join'子句的集合表达式中

示例代码:

var data = (from id in ids
            let d = await LoadDataAsync(id)
            select d);
Run Code Online (Sandbox Code Playgroud)

是不可能等待LINQ查询中的某些内容,还是需要以不同的方式构建它?

Ste*_*ary 25

LINQ对async/的支持非常有限await.对于LINQ到对象,我所知道的唯一真正有用的操作是Select使用async委托(这导致一系列任务).

List<T> data = new List<T>();
foreach (var id in ids)
  data.Add(await LoadDataAsync(id));
Run Code Online (Sandbox Code Playgroud)

如果您可以LoadDataAsync安全地并行执行,您的示例可以重写为:

T[] data = await Task.WhenAll(ids.Select(id => LoadDataAsync(id)));
Run Code Online (Sandbox Code Playgroud)

  • 如果`LoadData`是I/O绑定的话. (4认同)