Полное руководство по языку программирования С# 14 и платформе .NET 10 / Parallel LINQ

Метод AsOrdered

Начальный ⏱ 2 мин чтения 👁 2 🕓 обновлено 11.08.2026

При выполнении параллельного запроса порядок данных в результирующей выборки может быть не предсказуем. Например:


int[] numbers = new int[] { -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, };
var squares = from n in numbers.AsParallel()
                 where n > 0
                 select Square(n);

foreach (var n in squares)
    Console.WriteLine(n);

int Square(int n) => n * n;

В данном случае программа вычисляет квадраты чисел, которые больше 0. Однако в результате работы программы мы можем получить неупорядоченный вывод:

1
16
49
4
25
64
9
36

То есть данные склеиваются в общий набор неупорядоченно.

Если в запросе применяются операторы или методы сортировки в запросе, данные автоматически упорядочиваются:


var squares = from n in numbers.AsParallel()
                 where n > 0
                 orderby n  // сортировка
                 select Square(n);

Однако не всегда оператор orderby или метод OrderBy используются в запросах. Более того они упорядочивают результирующую выборку в соответствии с результатами, а не в соответствии с исходной последовательностью. В этих случаях мы может применять метод AsOrdered():


var squares = from n in numbers.AsParallel().AsOrdered()
              where n > 0
              select Square(n);

В этом случае результат уже будет упорядоченным в соответствии с тем, как элементы располагаются в исходной последовательности:

1
4
9
16
25
36
49
64

В то же время надо понимать, что упорядочивание в параллельной операции приводит к увеличению издержек, поэтому подобный запрос будет выполняться медленнее, чем неупорядоченный. И если задача не требует возвращение упорядоченного набора, то лучше не применять метод AsOrdered.

Кроме того, если в программе предстоят какие-нибудь манипуляции с полученным набором, однако упорядочивание больше не требуется, мы можем применить метод AsUnordered():


int[] numbers = new int[] { -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, };
var squares = from n in numbers.AsParallel().AsOrdered()
              where n > 0
              select Square(n);

// выбираем числа больще 4 без упорядочивания результата
var query = from n in squares.AsUnordered()
            where n > 4
            select n;

foreach (var n in query)
    Console.WriteLine(n);

int Square(int n) => n * n;

Проверь себя

📋 Тест по теме «Метод AsOrdered» Тест по теме

Практические задания

Лёгкое Ручная проверка Заполните пропуск в коде (1)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

int[] _____ = new int[] { -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, };
var squares = from n in numbers.AsParallel()
                 where n > 0
                 select Square(n);

foreach (var n in squares)
    Console.WriteLine(n);

int Square(int n) => n * n;
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (2)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

var squares = from n in _____.AsParallel()
                 where n > 0
                 orderby n  // сортировка
                 select Square(n);
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (3)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

var squares = from n in numbers._____().AsOrdered()
              where n > 0
              select Square(n);
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (4)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

int[] numbers = new int[] { -2, -_____, 0, 1, 2, 3, 4, 5, 6, 7, 8, };
var squares = from n in numbers.AsParallel().AsOrdered()
              where n > 0
              select Square(n);

// выбираем числа больще 4 без упорядочивания результата
var query = from n in squares.AsUnordered()
            where n > 4
            select n;

foreach (var n in query)
    Console.WriteLine(n);

int Square(int n) => n * n;
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (5)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

int[] numbers = new int[] { -2, -1, 0, 1, 2, _____, 4, 5, 6, 7, 8, };
var squares = from n in numbers.AsParallel()
                 where n > 0
                 select Square(n);

foreach (var n in squares)
    Console.WriteLine(n);

int Square(int n) => n * n;
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (1)
+20 XP

В этом фрагменте кода урока пропущены два ключевых элемента. Впишите оба пропущенных значения через запятую в порядке появления (например: x, 5).

int[] numbers = new int[] { -2, -1, _____, 1, 2, 3, 4, 5, _____, 7, 8, };
var squares = from n in numbers.AsParallel()
                 where n > 0
                 select Square(n);

foreach (var n in squares)
    Console.WriteLine(n);

int Square(int n) => n * n;
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (2)
+20 XP

В этом фрагменте кода урока пропущены два ключевых элемента. Впишите оба пропущенных значения через запятую в порядке появления (например: x, 5).

var squares = from n in numbers.AsParallel()
                 where n > 0
                 orderby n  // сортировка
                 _____ _____(n);
Войдите, чтобы отправить решение
Среднее Ручная проверка Расставьте строки кода в правильном порядке
+20 XP

Строки кода из примера этого урока перемешаны. Впишите их в правильном порядке, каждую строку — с новой строки.

int[] numbers = new int[] { -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, };
                 select Square(n);
                 where n > 0
int Square(int n) => n * n;
foreach (var n in squares)
    Console.WriteLine(n);
var squares = from n in numbers.AsParallel()
Войдите, чтобы отправить решение
Сложное Ручная проверка Объясните и модифицируйте пример из урока «Метод AsOrdered»
+30 XP

Опишите своими словами, что делает приведённый пример кода из урока «Метод AsOrdered», и предложите одно осмысленное изменение (например, другое входное значение или дополнительное условие). Приведите итоговый код.

int[] numbers = new int[] { -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, };
var squares = from n in numbers.AsParallel()
                 where n > 0
                 select Square(n);

foreach (var n in squares)
    Console.WriteLine(n);

int Square(int n) => n * n;
Войдите, чтобы отправить решение
Сложное Ручная проверка Найдите потенциальную проблему в коде урока «Метод AsOrdered»
+30 XP

Изучите приведённый фрагмент кода и опишите, при каких входных данных или условиях он может сработать не так, как ожидается (граничный случай, отсутствие проверки и т.п.). Предложите исправленный вариант.

var squares = from n in numbers.AsParallel()
                 where n > 0
                 orderby n  // сортировка
                 select Square(n);
Войдите, чтобы отправить решение
Мини-проект Ручная проверка Мини-проект по теме «Метод AsOrdered»
+50 XP

Соберите небольшую программу, которая последовательно демонстрирует ключевые идеи урока. Программа должна быть рабочей и содержать минимум два самостоятельно написанных фрагмента, а не просто копию примера из урока.

Войдите, чтобы отправить решение
Домашнее задание Ручная проверка Домашнее задание по теме «Метод AsOrdered»
+25 XP

Напишите собственную небольшую программу, применяющую материал темы «Метод AsOrdered». Используйте не менее одной конструкции, показанной в примерах урока. Прикрепите код решения и краткое описание того, что он делает.

Войдите, чтобы отправить решение

Обсуждение (0)

Войдите, чтобы оставить комментарий.