По умолчанию они абсолютно неупорядочены, и именно поэтому существует AsOrdered
. Использование AsOrdered
вводит дополнительный шаг и, следовательно, дополнительные издержки, чтобы получить результаты из разрозненных рабочих потоков и привести их в надлежащий порядок. Кроме того, если это не очевидно, AsOrdered
блокирует (см. Обновление ниже), что означает, что результаты не будут проходить через конвейер запросов PLINQ, пока элементы не поступят в том порядке, в котором они изначально были запущены.
Наконец, обратите внимание, что существует AsUnordered
, так что вы можете переключить запрос обратно на неупорядоченный запрос с этой точки вперед в конвейере запросов.
UPDATE:
Я просто хочу уточнить, что я имею в виду под "блокировкой". Что происходит, так это то, что PLINQ должен соблюдать исходный порядок элементов в тот момент, когда они передаются в ParallelQuery. Оттуда он будет гарантировать, что элементы, завершившиеся до элементов, вышедших из строя, будут буферизованы . Поэтому, если у вас есть элементы в таком порядке, как «один», «два», «три» и «два» заканчиваются до «одного», «два» будут буферизироваться до тех пор, пока «один» не будет завершен.