Есть ли эквивалент «продолжить» в Parallel.ForEach?


249

Я портирую некоторый код Parallel.ForEachи получил ошибку с кодом, который у continueменя есть. Есть ли что-то эквивалентное, что я могу использовать в Parallel.ForEachфункционально эквивалентном continueв foreachцикле?

Parallel.ForEach(items, parallelOptions, item =>
{
    if (!isTrue)
        continue;
});

Ответы:


414
return;

(тело - это просто функция, вызываемая для каждого элемента)


23

Когда вы преобразовали свой цикл в совместимое определение для логики Parallel.Foreach, вы в конечном итоге сделали тело оператора лямбда-выражением. Ну, это действие, которое вызывается функцией Parallel.

Таким образом, заменить continueна return, и порвать с Stop()или Break()заявления.


1
Возможно, лучшим вариантом, чем замена разрывов на операторы возврата, являются ParallelLoopState's Stop () и Break (). blogs.msdn.com/b/pfxteam/archive/2009/05/27/9645023.aspx
JasonCoder

@JasonCoder ни один из них не эквивалентен, continueхотя.
будет

1
@ Верно, поэтому я сказал перерывы. операторы return заменяют операторы
continue

@JasonCoder - Ах. Я неправильно понял, что вы имели в виду, упс.
будет

-1

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

Например, код в вопросе будет переписан как:

Parallel.ForEach(items, parallelOptions, item =>
{
    //Skip an item by applying the opposite condition used for continue on all items until the end of the foreach

    if (isTrue) 
    {
      //Do what you want to do for all items
    }

});
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.