首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何限制Parallel.ForEach?

如何限制Parallel.ForEach?
EN

Stack Overflow用户
提问于 2012-02-15 17:08:36
回答 4查看 187.2K关注 0票数 339

我有一个Parallel.ForEach()异步循环,用来下载一些网页。我的带宽是有限的,所以我每次只能下载x个页面,但Parallel.ForEach会执行所需网页的整个列表。

在运行Parallel.ForEach时,有没有办法限制线程数量或任何其他限制因素?

演示代码:

代码语言:javascript
复制
Parallel.ForEach(listOfWebpages, webpage => {
  Download(webpage);
});

真正的任务与网页无关,所以创造性的网络爬行解决方案不会有帮助。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-15 17:11:20

您可以在ParallelOptions参数中指定MaxDegreeOfParallelism

代码语言:javascript
复制
Parallel.ForEach(
    listOfWebpages,
    new ParallelOptions { MaxDegreeOfParallelism = 4 },
    webpage => { Download(webpage); }
);

MSDN:Parallel.ForEach

MSDN:ParallelOptions.MaxDegreeOfParallelism

票数 632
EN

Stack Overflow用户

发布于 2012-02-15 17:11:49

您可以使用ParallelOptions和设置MaxDegreeOfParallelism来限制并发线程的数量:

代码语言:javascript
复制
Parallel.ForEach(
    listOfwebpages, 
    new ParallelOptions{MaxDegreeOfParallelism=2}, 
    webpage => {Download(webpage);});     
票数 49
EN

Stack Overflow用户

发布于 2012-02-15 17:12:17

使用另一个采用ParallelOptions实例的Parallel.Foreach重载,并设置MaxDegreeOfParallelism以限制并行执行的实例数量。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9290498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档