IAsyncEnumerableでlinqタイプのメソッドを使用する正しい方法は何ですか?


8

.NET Coreでパッケージ化されたIAsyncEnumerableのlinqサポートは含まれていないようです。ToListやCountなどの単純なことを実行できる正しい方法は何ですか?


4
ToListまたはCountを呼び出すだけの場合、非同期列挙子メソッドを使用する意味は何ですか?
stuartd

4
なぜこれが閉じているのですか?それは良い明確な質問です。
スチュアート

3
これを再開するために投票してください。質問は完全に理にかなっており、ご覧のように簡単な答えがあります
Stilgar

おかげで@Stilgar、私は🙂それがもの知りませんでした
スチュアート

System.Linq.Async Nugetパッケージ。
Theodor Zoulias

回答:


7

これは良い質問IAsyncEnumerable<T>です。IntelliSenseには、デフォルトの.NET Coreアプリで持つ暗黙的なフレームワーク参照が含まれている状態では、有用なアイテムがほとんどありません。

次のようにSystem.Linq.Async(Ix Asyncとして知られています。ここを参照)パッケージを追加すると予想されます。

<PackageReference Include="System.Linq.Async" Version="4.0.0" />

次にCountAsync、またはを使用できますToListAsync

async IAsyncEnumerable<int> Numbers()
{
    yield return 1;
    await Task.Delay(100);
    yield return 2;
}

var count = await Numbers().CountAsync();
var myList = await Numbers().ToListAsync();

コメントで指摘したように、これらの方法では、非同期ストリームとしてデータを保持したまま使用すると、のようなもので、より強力な機能を使用した後、独自の便利なことに、彼らが使用されるべきではないSelectAwaitWhereAwait等...


メソッドはそのまま使用できます。IAsyncEnumerableであるAPIを渡されたが、その非同期性について本当に気にしていない場合はどうなりますか?自分でforeach-countを強制する必要がありますか(とにかくCountAsyncが行うことです)?
スティルガー

あなたはそれの非同期性に注意しなければなりません、あなたはオプトアウトできません、それはasyncメソッドと同じです。あなたが何をしているのか絶対に理解していない限り、それをブロックしないでください。
スチュアート

しかし、CountAsyncはブロックしていません。完全なシーケンスを待っています。待機してから変数を数えると、同じ効果があります。
スティルガー

はい、そうです。そのときの最初のコメントは理解できなかったと思います
スチュアート
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.