[C#] Parallel.ForEach를 어떻게 제한 할 수 있습니까?

웹 페이지를 다운로드하는 Parallel.ForEach () 비동기 루프가 있습니다. 대역폭은 제한되어 있으므로 한 번에 x 페이지 만 다운로드 할 수 있지만 Parallel.ForEach는 원하는 웹 페이지의 전체 목록을 실행합니다.

Parallel.ForEach를 실행하는 동안 스레드 번호 또는 다른 제한기를 제한하는 방법이 있습니까?

데모 코드 :

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

실제 작업은 웹 페이지와 관련이 없으므로 창의적인 웹 크롤링 솔루션은 도움이되지 않습니다.



답변

매개 변수 MaxDegreeOfParallelism에 a를 지정할 수 있습니다 ParallelOptions.

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

MSDN : Parallel.ForEach

MSDN : ParallelOptions.MaxDegreeOfParallelism


답변

ParallelOptions를 사용하고 MaxDegreeOfParallelism을 설정하여 동시 스레드 수를 제한 할 수 있습니다.

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


답변

인스턴스에 Parallel.Foreach걸리는 다른 과부하를 사용 하고 동시에 실행되는 인스턴스 수를 제한하도록 ParallelOptions설정하십시오 MaxDegreeOfParallelism.


답변

그리고 VB.net 사용자 (구문은 이상하고 찾기가 어렵습니다) …

Parallel.ForEach(listOfWebpages, New ParallelOptions() With {.MaxDegreeOfParallelism = 8}, Sub(webpage)
......end sub)  


답변