我有一个Parallel.ForEach()异步循环,用来下载一些网页。我的带宽是有限的,所以我每次只能下载x个页面,但Parallel.ForEach会执行所需网页的整个列表。
在运行Parallel.ForEach时,有没有办法限制线程数量或任何其他限制因素?
演示代码:
Parallel.ForEach(listOfWebpages, webpage => {
Download(webpage);
});真正的任务与网页无关,所以创造性的网络爬行解决方案不会有帮助。
发布于 2012-02-15 17:11:20
您可以在ParallelOptions参数中指定MaxDegreeOfParallelism:
Parallel.ForEach(
listOfWebpages,
new ParallelOptions { MaxDegreeOfParallelism = 4 },
webpage => { Download(webpage); }
);MSDN:Parallel.ForEach
MSDN:ParallelOptions.MaxDegreeOfParallelism
发布于 2012-02-15 17:11:49
您可以使用ParallelOptions和设置MaxDegreeOfParallelism来限制并发线程的数量:
Parallel.ForEach(
listOfwebpages,
new ParallelOptions{MaxDegreeOfParallelism=2},
webpage => {Download(webpage);}); 发布于 2012-02-15 17:12:17
使用另一个采用ParallelOptions实例的Parallel.Foreach重载,并设置MaxDegreeOfParallelism以限制并行执行的实例数量。
https://stackoverflow.com/questions/9290498
复制相似问题