AsParallel和AsParallel之间的区别。在C#中选择

时间:2017-06-07 04:41:26

标签: c# task-parallel-library

我想知道在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()的解释方式不同

1 个答案:

答案 0 :(得分:3)

AsParallel()的作用是它意味着任何以下LINQ方法将并行执行。 直接影响的是foreach的行为方式。

所以,这个:

var parallelList = list.AsParallel();

foreach (var num in parallelList)
    System.Console.WriteLine(num);//returns 1 ..100 in order

只是迭代list的一种令人困惑的方式。它没有任何并行化。

虽然这个:

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,但情况有所不同。)