Чи є еквівалент "продовжувати" в паралелі.ForEach?


249

Я переношу якийсь код Parallel.ForEachі отримав помилку з у continueмене в коді. Чи є що - то еквівалент можна використовувати в Parallel.ForEachфункціонально еквівалентні continueв foreachциклі?

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

Відповіді:


414
return;

(тіло - це лише функція, що викликається для кожного елемента)


23

Перетворивши цикл у сумісне визначення для логіки Parallel.Foreach, ви в кінцевому підсумку зробили тіло оператора лямбда. Ну, це дія, яку викликає функція Паралель.

Отже, замініть continueна return, і перервіть з Stop()або Break()твердженнями.


1
Можливим кращим варіантом, ніж заміна перерв на оператори return, є Stop () і Break () ParallelLoopState. blogs.msdn.com/b/pfxteam/archive/2009/05/27/9645023.aspx
JasonCoder

@JasonCoder жоден з них не рівнозначний continueхоч.
буде

1
@ буде правильно, саме тому я сказав перерви.
Звернення

@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.