我有一个Parallel.ForEach()异步循环,我下载了一些网页。我的带宽是有限的,所以我只能下载x页每次并行。ForEach执行所需网页的整个列表。
在运行Parallel.ForEach时,是否有办法限制线程数或任何其他限制器?
演示代码:
Parallel.ForEach(listOfWebpages, webpage => {
Download(webpage);
});
真正的任务与网页无关,所以创造性的网络爬行解决方案不会有帮助。
我有一个Parallel.ForEach()异步循环,我下载了一些网页。我的带宽是有限的,所以我只能下载x页每次并行。ForEach执行所需网页的整个列表。
在运行Parallel.ForEach时,是否有办法限制线程数或任何其他限制器?
演示代码:
Parallel.ForEach(listOfWebpages, webpage => {
Download(webpage);
});
真正的任务与网页无关,所以创造性的网络爬行解决方案不会有帮助。
你可以在ParallelOptions参数中指定MaxDegreeOfParallelism:
Parallel.ForEach(
listOfWebpages,
new ParallelOptions { MaxDegreeOfParallelism = 4 },
webpage => { Download(webpage); }
);
MSDN:平行。ForEach
MSDN: ParallelOptions。MaxDegreeOfParallelism
你可以使用ParallelOptions并设置MaxDegreeOfParallelism来限制并发线程的数量:
Parallel.ForEach(
listOfwebpages,
new ParallelOptions{MaxDegreeOfParallelism=2},
webpage => {Download(webpage);});
对于VB.net用户(语法很奇怪,很难找到)…
Parallel.ForEach(listOfWebpages, New ParallelOptions() With {.MaxDegreeOfParallelism = 8}, Sub(webpage)
......end sub)