3

非同期列挙子を返すメソッドがあります

    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 バウンドで、データベースからデータを読み取っています。

4

2 に答える 2