如何限制Parallel.ForEach? [英] How can I limit Parallel.ForEach?
问题描述
我有一个Parallel.ForEach()异步环路与我下载了一些网页。我的带宽是有限的,所以我能下载只有X页每一次,但Parallel.ForEach执行所需的网页的完整列表。
I have a Parallel.ForEach() async loop with which I download some webpages. My bandwidth is limited so I can download only x pages per time but Parallel.ForEach executes whole list of desired webpages.
有没有办法来限制线程号或其他任何限制,同时运行Parallel.ForEach?
Is there a way to limit thread number or any other limiter while running Parallel.ForEach?
演示code:
Parallel.ForEach(listOfWebpages, webpage => {
Download(webpage);
});
真正的任务有无关的网页,太有创意了网页抓取的解决方案也无济于事。
The real task has nothing to do with webpages, so creative web crawling solutions won't help.
推荐答案
您可以指定一个 MaxDegreeOfParallelism
在 ParallelOptions
参数:
You can specify a MaxDegreeOfParallelism
in a ParallelOptions
parameter:
Parallel.ForEach(
listOfWebpages,
new ParallelOptions { MaxDegreeOfParallelism = 4 },
webpage => { Download(webpage); }
);
MSDN: Parallel.ForEach
MSDN:<一href="http://msdn.microsoft.com/en-us/library/system.threading.tasks.paralleloptions.maxdegreeofparallelism.aspx">ParallelOptions.MaxDegreeOfParallelism
这篇关于如何限制Parallel.ForEach?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!