IAsyncEnumerable を使用した LINQのチャットを見て、 IAsyncEnumerablesの拡張メソッドを処理する方法についての洞察を得ることができましたが、率直に言って、実際のアプリケーション、特に私の経験レベルでは十分に詳しく説明されていませんでした。IAsyncEnumerable
s のドキュメントはまだ実際には存在しません
IAsyncEnumerable
ファイルから読み取り、ストリームで何らかの変換を行い、 を返し、次のように、任意の数のオブジェクトが取得された後にそれらのオブジェクトを下流に送信しようとしています。
await foreach (var data in ProcessBlob(downloadedFile))
{
//todo add data to List<T> called listWithPreConfiguredNumberOfElements
if (listWithPreConfiguredNumberOfElements.Count == preConfiguredNumber)
await _messageHandler.Handle(listWithPreConfiguredNumberOfElements);
//repeat the behaviour till all the elements in the IAsyncEnumerable returned by ProcessBlob are sent downstream to the _messageHandler.
}
ここまで読んで分かったのは、この行はs (またはs)await foreach
を使用するデータに取り組んでいるため、前もってカウントしていないということです。また、スレッド間でそのデータを共有することはあまりスレッドセーフではないように見えるため、リスト変数を使用して長さチェックを行うこともためらっています。Task
ValueTask
System.Linq.Async
関連する拡張メソッドを使用できることを期待して、パッケージを使用しています。の形でいくつかの約束を見ることができますTakeWhile
が、私がしようとしているタスクがどれほどスレッドセーフであるかについての私の理解はすべてではなく、自信を失います.
正しい方向への助けやプッシュは大歓迎です、ありがとう。