19

awaitクエリでキーワードを使用しようとすると、次のLINQようになります。

'await' 演算子は、最初の 'from' 句の最初のコレクション式内、または 'join' 句のコレクション式内のクエリ式でのみ使用できます

サンプルコード:

var data = (from id in ids
            let d = await LoadDataAsync(id)
            select d);

クエリで何かを待機することはできませんかLINQ、それとも別の方法で構造化する必要がありますか?

4

3 に答える 3

26

LINQ のasync/のサポートは非​​常に限られていawaitます。LINQ-to-objects の場合、私が知っている唯一の本当に便利な操作はSelectasyncデリゲートを使用することです (一連のタスクになります)。

List<T> data = new List<T>();
foreach (var id in ids)
  data.Add(await LoadDataAsync(id));

安全に並行して実行できる場合LoadDataAsync、例は次のように書き直すことができます。

T[] data = await Task.WhenAll(ids.Select(id => LoadDataAsync(id)));
于 2013-05-18T13:34:22.190 に答える