Параллельно. Для прерывания - PullRequest
7 голосов
/ 22 августа 2010

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

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

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

if (integerArray[i] == 68)

   break;

Спасибо.

Ответы [ 2 ]

9 голосов
/ 22 августа 2010

Если вы хотите остановиться после выполнения текущей итерации (но итерации до выполнения текущей БУДУЩЕЙ - то есть итерации с более низким индексом = 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))

2 голосов
/ 22 августа 2010

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

...