我想知道 C# 中 AsParallel 和 AsParallel.Select() 之间的区别是什么,因为两者都返回 AsParallelQuery 的实例。 考虑以下代码片段:
var list = Enumerable.Range(1, 100).ToList();
var parallelList = list.AsParallel();
foreach (var num in parallelList)
System.Console.WriteLine(num);//returns 1 ..100 in order
var query = list.AsParallel().Select(num => num);
foreach (var num in query)
System.Console.WriteLine(num);/*returns 1..100 not in order*/
parallelList.ForEach(System.Console.WriteLine); //returns 1 ..100 in order
我想知道 list.AsParallel() 和 list.AsParallel().Select() 的解释有何不同
最佳答案
AsParallel()
的作用是,这意味着任何后续的 LINQ 方法都将并行执行。它不直接影响的是foreach
的行为方式。
所以,这个:
var parallelList = list.AsParallel();
foreach (var num in parallelList)
System.Console.WriteLine(num);//returns 1 ..100 in order
只是一种令人困惑的迭代列表
的方式。它不会并行化任何东西。
虽然这样:
var query = list.AsParallel().Select(num => num);
foreach (var num in query)
System.Console.WriteLine(num);/*returns 1..100 not in order*/
并行执行(无用的)Select
查询,这可能会更改元素的顺序。但 foreach
仍然在单个线程上执行。
最后,这个:
parallelList.ForEach(System.Console.WriteLine); //returns 1 ..100 in order
不会编译,除非您有一些自定义的ForEach
扩展方法,其行为可能与foreach
相同。 (有 ForAll
,但这是不同的。)
关于c# - C# 中 AsParallel 和 AsParallel.Select 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44403638/