リソース制約を使用した Parallel.ForEach() での同時タスクの管理
個々の操作がリソース制限 (ネットワーク帯域幅や API レート制限など) の影響を受ける並列ループを操作する場合、同時実行レベルの制御が重要です。 Parallel.ForEach()
メソッドを ParallelOptions
クラスと組み合わせて使用すると、簡単な解決策が得られます。
ParallelOptions
クラスは、同時実行が許可されるスレッドの最大数を設定する MaxDegreeOfParallelism
プロパティを提供します。 これにより、同時操作の数が効果的に制限され、リソースの過負荷が防止されます。
ネットワーク帯域幅により、同時ダウンロードがたとえば一度に 4 つに制限される Web スクレイピング シナリオを考えてみましょう。 次のコード スニペットは、この制限を適用する方法を示しています。
<code class="language-csharp">Parallel.ForEach( listOfWebpages, new ParallelOptions { MaxDegreeOfParallelism = 4 }, webpage => { DownloadWebpage(webpage); } );</code>
MaxDegreeOfParallelism
を 4 に設定すると、最大 4 つのスレッドが Web ページを同時にダウンロードするため、帯域幅の制約が尊重されます。
さらに読む:
以上がスロットル操作の Parallel.ForEach() で並列処理を制限するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。