Параллельно. Для прерывания

Предположим, у вас есть массив из 1000 случайных целых чисел, и вам нужно перебрать его, чтобы найти число 68, например.

Использование нового Parallel.For на четырехъядерном процессоре значительно улучшило бы скорость, заставив каждое ядро ​​работать только с 250 элементами массива.

Вопрос: возможно ли прервать цикл Parallel.For при выполнении следующего условия?

if (integerArray[i] == 68)

   break;

Спасибо.

7
задан abenci 21 August 2010 в 20:00
поделиться

2 ответа

Если вы хотите остановить текущую выполняющуюся итерацию (но итерации перед выполнением текущего БУДЕТ - то есть итерации с более низким индексом = i)

Parallel.For(0, 100, (i, s) =>
    {
        s.Break();
    });

или, если вы хотите остановиться после текущего и взаимодействий до этого (с точки зрения индекса = i), также должны останавливаться

Parallel.For(0, 100, (i, s) =>
    {
        s.Stop();
    });

, но в ОБЕИХ случаях рекомендуется проверить, следует ли прерывать работу, если итерация может занять некоторое время

s.ShouldExitCurrentIteration

подробнее здесь Метод Parallel.For (Int32, Int32, Action (Int32, ParallelLoopState))

9
ответ дан 6 December 2019 в 22:59
поделиться

Мне кажется, вы должны изучить PLINQ (Parallel LINQ), чтобы выполнить параллельный запрос, а не параллельный для.
http://msdn.microsoft.com/en-us/library/dd460688.aspx

2
ответ дан 6 December 2019 в 22:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: