¿Hay un equivalente a 'continuar' en un Parallel.ForEach?

249

Estoy transfiriendo un código Parallel.ForEachy obtuve un error con un continuecódigo que tengo. ¿Hay algo equivalente que pueda usar en un Parallel.ForEachequivalente funcional continueen un foreachbucle?

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

Respuestas:

414
return;

(el cuerpo es solo una función llamada para cada elemento)

Dave
fuente
23

Cuando convertiste tu ciclo en una definición compatible para la lógica Paralelo a Paralelo, terminaste convirtiendo el cuerpo de la declaración en una lambda. Bueno, esa es una acción que se llama mediante la función Paralela.

Por lo tanto, reemplace continuecon returny rompa con Stop()o Break()declaraciones.

Taran
fuente
1
Una posible mejor opción que reemplazar las pausas con declaraciones de retorno es Stop () y Break () de ParallelLoopState. blogs.msdn.com/b/pfxteam/archive/2009/05/27/9645023.aspx
JasonCoder
@JasonCoder, ninguno de esos es equivalente a eso continue.
será el
1
@ corregirá, por eso dije descansos. las declaraciones de devolución reemplazan las declaraciones de continuación
JasonCoder
@JasonCoder - Ah. No entendí lo que querías decir, whoops.
será el
-1

Continuar significa saltear el resto del bloque y pasar al siguiente elemento. Por lo tanto, puede implementar continuar aplicando la condición opuesta al resto del bloque.

Por ejemplo, el código en la pregunta se volvería a escribir como:

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
fuente