ParallelEnumerable
有一个静态成员AsParallel
。如果我有一个IEnumerable<T>
并且想要使用Parallel.ForEach
,这是否意味着我应该始终使用AsParallel
例如,这两个都是正确的吗(其他条件相同)?
不使用AsParallel
List<string> list = new List<string>();
Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)), f => list.Add(f));
或使用AsParallel
List<string> list = new List<string>();
Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)).AsParallel(), f => list.Add(f));
发布于 2010-02-16 09:54:58
这取决于被称为什么,它们是不同的问题。
.AsParallel()
并行化枚举,而不是任务委派。
Parallel.ForEach
并行化了循环,将任务分配给每个元素的工作线程。
因此,除非你的源枚举从并行中获益(例如,reader.Match(file)
很昂贵),否则它们是相等的。关于你的最后一个问题,是的,,两个都是正确的。
此外,还有一个你可能想要看看的结构,它可以缩短它,仍然可以获得PLINQ的最大好处:
GetFileList().Where(file => reader.Match(file)).ForAll(f => list.Add(f));
https://stackoverflow.com/questions/2270097
复制相似问题