首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Parallel.ForEach是否需要AsParallel()

Parallel.ForEach是否需要AsParallel()
EN

Stack Overflow用户
提问于 2010-02-16 09:29:03
回答 1查看 4.4K关注 0票数 19

ParallelEnumerable有一个静态成员AsParallel。如果我有一个IEnumerable<T>并且想要使用Parallel.ForEach,这是否意味着我应该始终使用AsParallel

例如,这两个都是正确的吗(其他条件相同)?

不使用AsParallel

代码语言:javascript
复制
List<string> list = new List<string>();
Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)), f => list.Add(f));

或使用AsParallel

代码语言:javascript
复制
List<string> list = new List<string>();
Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)).AsParallel(), f => list.Add(f));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-02-16 09:54:58

这取决于被称为什么,它们是不同的问题。

.AsParallel()并行化枚举,而不是任务委派。

Parallel.ForEach并行化了循环,将任务分配给每个元素的工作线程。

因此,除非你的源枚举从并行中获益(例如,reader.Match(file)很昂贵),否则它们是相等的。关于你的最后一个问题,是的,,两个都是正确的。

此外,还有一个你可能想要看看的结构,它可以缩短它,仍然可以获得PLINQ的最大好处:

代码语言:javascript
复制
GetFileList().Where(file => reader.Match(file)).ForAll(f => list.Add(f));
票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2270097

复制
相关文章

相似问题

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