非同期列挙子を返すメソッドがあります
public async IAsyncEnumerable<IResult> DoWorkAsync()
{
await Something();
foreach (var item in ListOfWorkItems)
{
yield return DoWork(item);
}
}
そして発信者:
public async Task LogResultsAsync()
{
await foreach (var result in DoWorkAsync())
{
Console.WriteLine(result);
}
}
は高価な操作であるためDoWork
、何らかの方法で並列化することをお勧めします。したがって、次のように機能します。
public async IAsyncEnumerable<IResult> DoWorkAsync()
{
await Something();
Parallel.ForEach(ListOfWorkItems, item =>
{
yield return DoWork(item);
});
}
しかし、私は内部から利回りを返すことができないParallel.Foreach
ので、これを行う最善の方法は何だろうか?
返される結果の順序は関係ありません。
ありがとう。
編集:申し訳ありませんが、 のコードをいくつかDoWorkAsync
省略しました。質問とはあまり関係がないため、上記のコードに入れなかったものを実際に待っていました。今すぐ更新
Edit2: DoWork
私の場合、ほとんどが I/O バウンドで、データベースからデータを読み取っています。