dka*_*man 18 .net-4.0 plinq task-parallel-library
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));
Run Code Online (Sandbox Code Playgroud)
还是用AsParallel?
List<string> list = new List<string>();
Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)).AsParallel(), f => list.Add(f));
Run Code Online (Sandbox Code Playgroud)
Nic*_*ver 23
这取决于被称为什么,它们是不同的问题.
.AsParallel()并行枚举而不是任务委派.
Parallel.ForEach并行化循环,为每个元素的工作线程分配任务.
因此,除非您的源枚举从并行中获益(例如reader.Match(file),价格昂贵),否则它们是相等的.对于你的上一个问题,是的,两者都是正确的.
另外,还有一个你可能想看的结构可以缩短它,仍然可以获得PLINQ的最大好处:
GetFileList().Where(file => reader.Match(file)).ForAll(f => list.Add(f));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4240 次 |
| 最近记录: |