где
о состоянии цикла.
Аналогично методуFor , параллельное выполнение цикла методомForEach можно остановить, вызвав методBreak для экземпляра объекта типаParallelLoopState,передаваемого через параметрbody,при условии, что используется приведенная ниже форма методаFor Each .
public static ParallelLoopResult
ForEach
ActiorKTSource, ParallelLoopState>
В приведенном ниже примере программы демонстрируется применение методаFor Each на практике. Как и прежде, в данном примере создается крупный массив целых значений. А отличается данный пример от предыдущих тем, что метод, выполняющийся на каждом шаге цикла, просто выводит на консоль значения из массива. Как правило, методWriteLine в распараллеливаемом цикле не применяется, потому что ввод-вывод на консоль осуществляется настолько медленно, что цикл оказывается полностью привязанным к вводу-выводу. Но в данном примере методWriteLine применяется исключительно в целях демонстрации возможностей методаForEach .При обнаружении отрицательного значения выполнение цикла прерывается вызовом методаBreak. Несмотря на то что методBreak вызывается в одной задаче,
// Использовать объекты типа ParallelLoopResult и ParallelLoopState, а также // метод Break вместе с методом ForEachO для параллельного выполнения цикла.
using System;
using System.Threading.Tasks;
class DemoParallelForWithLoopResult { static int[] data;
// Метод, служащий в качестве тела параллельно выполняемого цикла.
// В данном примере переменной v передается значение элемента массива // данных, а не индекс этого элемента.
static void DisplayData(int v, ParallelLoopState pis) {
// Прервать цикл при обнаружении отрицательного значения, if (v < 0) pls.Break;
Console.WriteLine("Значение: " + v);
static void Main {
Console.WriteLine("Основной поток запущен."); data = new int[100000000];
// Инициализировать данные.