当我执行以下代码时:
using static System.Console;
var numbers = ParallelEnumerable.Range(0, 50);
WriteLine("\nNumbers divisible by 5 are:");
var divisibleBy5 = numbers
.AsParallel()
.WithExecutionMode(ParallelExecutionMode.ForceParallelism)
.Where(x => x % 5 == 0);
// .Where(x => x % 5 == 0)
//.ToList();
foreach (var number in divisibleBy5)
{
Write(number + "\t");
}
大多数时候我都能看到无序的结果。这是一个示例输出(预期行为):
Numbers divisible by 5 are:
0 15 30 40 5 20 35 45 10 25
现在我更改查询一点点(现在使用 ToList()):
var divisibleBy5 = numbers
.AsParallel()
.WithExecutionMode(ParallelExecutionMode.ForceParallelism)
//.Where(x => x % 5 == 0);
.Where(x => x % 5 == 0)
.ToList();
运行此更新后,我总是看到排序的输出:
Numbers divisible by 5 are:
0 5 10 15 20 25 30 35 40 45
问题:
1.这是预期的行为吗?
2.如果是这样,为什么?我们有这方面的支持文档吗?
我在这里缺少什么?可以分享一下你的想法吗?