1. ホーム
  2. c#

[解決済み】Parallel.ForEachを制限するには?

2022-03-25 12:01:49

質問

Parallel.ForEach()の非同期ループで、いくつかのウェブページをダウンロードすることができます。私の帯域幅は限られているので、一度にxページしかダウンロードできませんが、Parallel.ForEachは希望のウェブページの全リストを実行します。

Parallel.ForEachの実行中にスレッド数の制限やその他のリミッターをかける方法はありますか?

デモコードです。

Parallel.ForEach(listOfWebpages, webpage => {
  Download(webpage);
});

本当のタスクはウェブページとは関係ないので、クリエイティブなウェブクローリングソリューションは役に立ちません。

どのように解決するのか?

を指定することができます。 MaxDegreeOfParallelism の中に ParallelOptions パラメータを使用します。

Parallel.ForEach(
    listOfWebpages,
    new ParallelOptions { MaxDegreeOfParallelism = 4 },
    webpage => { Download(webpage); }
);

MSDN パラレル.ForEach

MSDN 並列オプション.MaxDegreeOfParallelism