我怎样才能限制Parallel.ForEach?
我有一个Parallel.ForEach()异步循环,我下载了一些网页。 我的带宽有限,所以我只能每次下载x页,但是Parallel.ForEach执行所需网页的整个列表。
有没有办法在运行Parallel.ForEach时限制线程号或任何其他限制器?
演示代码:
Parallel.ForEach(listOfWebpages, webpage => {
Download(webpage);
});
真正的任务与网页无关,所以创造性的网页爬行解决方案将无济于事。
您可以在ParallelOptions
参数中指定MaxDegreeOfParallelism
:
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);});
使用另一个接受ParallelOptions
实例的Parallel.Foreach
重载,并设置MaxDegreeOfParallelism
以限制并行执行多少个实例。