使用AsSequential以保持顺序

MaP*_*aPi 9 c# plinq task-parallel-library

我正在看这段代码

var numbers = Enumerable.Range(0, 20);
var parallelResult = numbers.AsParallel().AsOrdered()
    .Where(i => i % 2 == 0).AsSequential();

foreach (int i in parallelResult.Take(5))
    Console.WriteLine(i);
Run Code Online (Sandbox Code Playgroud)

AsSequential()应该做排序的结果数组.实际上它在执行后被排序,但如果我删除了调用AsSequential(),它仍然被调整(自AsOrdered()).

两者有什么区别?

Jon*_*eet 10

AsSequential只是意味着停止任何进一步的并行执行 - 因此名称.我不知道你在哪里认为它"应该使结果数组排序".该文档是相当清楚的:

将ParallelQuery转换为IEnumerable以强制对查询进行顺序评估.

正如您所说,AsOrdered确保排序(针对特定序列).