348

Parallel.ForEach()非同期ループがあり、これを使用していくつかのWebページをダウンロードします。帯域幅が制限されているため、一度にダウンロードできるのはxページのみですが、Parallel.ForEachは目的のWebページのリスト全体を実行します。

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

デモコード:

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

実際のタスクはWebページとは関係がないため、クリエイティブなWebクロールソリューションは役に立ちません。

4

4 に答える 4

643

パラメータMaxDegreeOfParallelismでaを指定できます。ParallelOptions

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

MSDN:Parallel.ForEach

MSDN:ParallelOptions.MaxDegreeOfParallelism

于 2012-02-15T09:11:19.800 に答える
50

ParallelOptionsを使用し、MaxDegreeOfParallelismを設定して、同時スレッドの数を制限できます。

Parallel.ForEach(
    listOfwebpages, 
    new ParallelOptions{MaxDegreeOfParallelism=2}, 
    webpage => {Download(webpage);});     
于 2012-02-15T09:11:48.793 に答える
24

Parallel.Foreachインスタンスを取得する別のオーバーロードを使用し、並行して実行されるインスタンスの数を制限するようParallelOptionsに設定します。MaxDegreeOfParallelism

于 2012-02-15T09:12:17.350 に答える
16

そして、VB.netユーザーの場合(構文は奇妙で見つけるのが難しいです)...

Parallel.ForEach(listOfWebpages, New ParallelOptions() With {.MaxDegreeOfParallelism = 8}, Sub(webpage)
......end sub)  
于 2016-08-16T18:18:24.537 に答える