gpt4 book ai didi

c# - C# 中 AsParallel 和 AsParallel.Select 的区别

转载 作者:行者123 更新时间:2023-11-30 21:40:40 25 4
gpt4 key购买 nike

我想知道 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

只是一种令人困惑的迭代 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,但那是不同的。)

关于c# - C# 中 AsParallel 和 AsParallel.Select 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44403638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com