Esiste un equivalente a "continue" in Parallel.ForEach?


249

Sto trasferendo un po 'di codice Parallel.ForEache ho ricevuto un errore con un continueho nel codice. C'è qualcosa di equivalente che posso usare in un Parallel.ForEachequivalente funzionalmente continuein un foreachciclo?

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

Risposte:


414
return;

(il corpo è solo una funzione chiamata per ogni oggetto)


23

Quando hai convertito il tuo loop in una definizione compatibile per la logica Parallel.Foreach, hai finito per trasformare il corpo dell'istruzione in lambda. Bene, questa è un'azione che viene chiamata dalla funzione parallela.

Quindi, sostituire continuecon return, e rompere con Stop()o Break()dichiarazioni.


1
Un'opzione migliore possibile rispetto alla sostituzione delle interruzioni con le dichiarazioni di ritorno è Stop () e Break () di ParallelLoopState. blogs.msdn.com/b/pfxteam/archive/2009/05/27/9645023.aspx
JasonCoder

@JasonCoder nessuno di questi è equivalente a continueperò.
sarà il

1
@will correct, motivo per cui ho detto pause. le dichiarazioni di ritorno sostituiscono le dichiarazioni continue
JasonCoder il

@JasonCoder - Ah. ho frainteso quello che volevi dire, whoops.
sarà il

-1

Continuare significa saltare il resto del blocco e passare all'elemento successivo. Pertanto, è possibile implementare continue applicando la condizione opposta al resto del blocco.

Ad esempio, il codice nella domanda verrebbe riscritto come:

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
    }

});
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.