웹 페이지를 다운로드하는 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)