Parallel.ForEach()非同期ループがあり、それを使っていくつかのWebページをダウンロードします。私の帯域幅は限られているので私は一回にxページしかダウンロードできないが、Parallel.ForEachは希望するウェブページの全リストを実行する。
Parallel.ForEachの実行中にスレッド番号または他の制限を制限する方法はありますか?
デモコード:
Parallel.ForEach(listOfWebpages, webpage => {
Download(webpage);
});
本当の仕事はウェブページとは無関係なので、クリエイティブなウェブクロールソリューションは役に立ちません。
MaxDegreeOfParallelism
パラメーターにParallelOptions
を指定できます。
Parallel.ForEach(
listOfWebpages,
new ParallelOptions { MaxDegreeOfParallelism = 4 },
webpage => { Download(webpage); }
);
MSDN: Parallel.ForEach
ParallelOptionsを使用してMaxDegreeOfParallelismを設定すると、同時スレッド数を制限できます。
Parallel.ForEach(listOfwebpages, new ParallelOptions{MaxDegreeOfParallelism=2}, webpage => {Download(webpage);});
ParallelOptions
インスタンスをとるParallel.Foreach
の別のオーバーロードを使用し、MaxDegreeOfParallelism
を設定して、同時に実行されるインスタンス数を制限します。
そしてVB.netユーザーのために(構文は奇妙で見つけにくい)...
Parallel.ForEach(listOfWebpages, New ParallelOptions() With {.MaxDegreeOfParallelism = 8}, Sub(webpage)
......end sub)