Gibt es ein Äquivalent zu "Weiter" in einer Parallel.ForEach?

249

Ich portiere einen Code nach Parallel.ForEachund habe einen Fehler mit einem continueCode erhalten. Gibt es etwas Äquivalentes, das ich in einer Parallel.ForEachFunktion verwenden kann, die continueeiner foreachSchleife entspricht?

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

Antworten:

414
return;

(Der Körper ist nur eine Funktion, die für jeden Gegenstand aufgerufen wird.)

Dave
quelle
23

Wenn Sie Ihre Schleife in eine kompatible Definition für die Parallel.Foreach-Logik konvertiert haben, haben Sie den Anweisungskörper schließlich zu einem Lambda gemacht. Nun, das ist eine Aktion, die von der Parallel-Funktion aufgerufen wird.

Ersetzen Sie also continuedurch returnoder brechen Sie mit Stop()oder Break()Anweisungen.

Taran
quelle
1
Eine mögliche bessere Option als das Ersetzen von Unterbrechungen durch return-Anweisungen ist Stop () und Break () von ParallelLoopState. blogs.msdn.com/b/pfxteam/archive/2009/05/27/9645023.aspx
JasonCoder
@ JasonCoder keines davon ist jedoch gleichwertig continue.
wird
1
@ wird korrigieren, weshalb ich Pausen sagte. return Anweisungen ersetzen continue Anweisungen
JasonCoder
@ JasonCoder - Ah. Ich habe falsch verstanden, was du meintest, whoops.
wird
-1

Um fortzufahren, müssen Sie den Rest des Blocks überspringen und zum nächsten Element wechseln. Sie können also continue implementieren, indem Sie die entgegengesetzte Bedingung auf den Rest des Blocks anwenden.

Beispielsweise würde der Code in der Frage wie folgt umgeschrieben:

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
    }

});
Shadi Namrouti
quelle