Parallel.ForEach()非同期ループを使用して、いくつかのWebページをダウンロードしています。私の帯域幅は制限されているため、一度にダウンロードできるのはxページのみですが、Parallel.ForEachは目的のWebページのリスト全体を実行します。
Parallel.ForEachの実行中にスレッド数またはその他のリミッターを制限する方法はありますか?
デモコード:
Parallel.ForEach(listOfWebpages, webpage => {
Download(webpage);
});
実際のタスクはWebページとは何の関係もないので、独創的なWebクロールソリューションは役に立ちません。
@jKlausリストが変更されていない場合(たとえば、単なるURLのセットの場合)、問題は本当にわかりませんか?
—
Shiv 2016
@Shiv、十分な時間が与えられたら...実行回数を数えて、それをリストの数と比較します。
—
jKlaus 2016
@jKlaus何がうまくいかないの?
—
Shiv
@jKlausスレッドセーフでない要素(整数)を変更しています。そのシナリオでは機能しないと思います。一方、OPはスレッドセーフにする必要があるものを変更しません。
—
Shiv 2016
@jKlausこれは、カウントを正しく設定するParallel.ForEachの例です> dotnetfiddle.net/moqP2C。MSDNリンク:msdn.microsoft.com/en-us/library/dd997393
—
v