如何限制Parallel.ForEach? [英] How can I limit Parallel.ForEach?

查看:211
本文介绍了如何限制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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆