Task Parallel Library (TPL) предоставляет два основных конструкта параллельных циклов: Parallel.For и Parallel.ForEach. Они позволяют эффективно обрабатывать коллекции сразу на нескольких тредах.
Выполнение тредов управляется через ParallelOptions и свойство MaxDegreeOfParallelism:
-1, что позволяет TPL автоматически определять количество тредов в зависимости от числа ядер процессораПример:
var options = new ParallelOptions { MaxDegreeOfParallelism = 2 };
Parallel.For(0, 10, options, (i, state) => { /* обработка */ });
Два метода управляют потоком выполнения цикла:
Break() сигнализирует об окончании текущей итерации, при этом уже запущенные итерации завершаются:
Parallel.For(0, 10, (i, state) => {
if (i == 5) {
state.Break();
return;
}
Console.WriteLine($"Обработка элемента {i}");
});
Этот подход обеспечивает мягкое завершение цикла.
Stop() останавливает выполнение немедленно, не дожидаясь завершения других итераций:
Parallel.ForEach(dataCollection, (data, state) => {
if (criticalConditionMet) {
state.Stop();
return;
}
// Обработка данных
});
Используй Stop(), когда нужно срочно прервать выполнение, например при критических ошибках.
Break(): мягкое завершение, позволяет уже запущенным итерациям доработатьStop(): немедленное прекращение всей обработкиВыбирай Break() для упорядоченного завершения и Stop() в критических ситуациях.
Когда MaxDegreeOfParallelism установлен в -1, TPL автоматически определяет количество потоков выполнения на основе числа доступных процессорных ядер в системе.
Новый — ещё не проверен сообществом
Вы