gpt4 book ai didi

c# - PLINQ 真的不保留顺序吗?

转载 作者:行者123 更新时间:2023-12-01 19:54:51 26 4
gpt4 key购买 nike

MSDN据说 PLINQ 不保留顺序。我想在我的项目中演示它,但我有一个问题,那就是始终保持秩序。我有一个收藏List<Tuple<int, int>> table这些是我的疑问:

var linqQuery = table
.Where(n => Enumerable.Range(2, (int) Math.Sqrt(n.Item1)).All(i => n.Item1 % i > 0))
.Take(10)
.ToList();

var plinqQuery = table
.AsParallel()
.Where(n => Enumerable.Range(2, (int) Math.Sqrt(n.Item1)).All(i => n.Item1 % i > 0))
.Take(10)
.ToList();

即使我不使用.AsOrdered(),它们也会产生相同的有序结果。 。谁能告诉我为什么?

最佳答案

PLINQ 不保证项目将按顺序处理。是否按顺序处理它们取决于几个因素。

首先,事先并不知道操作将执行多少个线程。在小型示例中,很可能只使用一两个线程。

其次,请记住 Task 不等于线程。任务就是要做什么。线程是运行它的引擎。任务管理器选择将哪个任务放到哪个线程上。它不会仅仅因为有任务等待就运行新线程,除非有未使用的 CPU 资源来真正运行该线程。

第三,即使有多个线程并行运行任务,任务也有可能按照启动顺序完成。

结论是,PLINQ 不会做任何事情来使任务按照它们初始化时的顺序运行,真正的执行顺序是多个因素的结果。您的代码不应依赖于任何一个结果。

关于c# - PLINQ 真的不保留顺序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41652152/

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