Existe um equivalente a 'continue' em um Parallel.ForEach?

249

Estou portando algum código Parallel.ForEache obtive um erro com um continuecódigo que tenho. Existe algo equivalente que eu possa usar em um Parallel.ForEachfuncionalmente equivalente a continueum foreachloop?

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

Respostas:

414
return;

(o corpo é apenas uma função chamada para cada item)

Dave
fonte
23

Quando você converteu seu loop em uma definição compatível para a lógica Parallel.Foreach, acabou transformando o corpo da instrução em lambda. Bem, essa é uma ação que é chamada pela função Parallel.

Portanto, substitua continuepor returne quebre com as instruções Stop()ou Break().

Taran
fonte
1
Uma opção melhor possível do que substituir quebras por instruções de retorno é Stop () e Break () de ParallelLoopState. blogs.msdn.com/b/pfxteam/archive/2009/05/27/9645023.aspx
JasonCoder
@ JasonCoder, nada disso é equivalente continue.
vai
1
@ Corrigir, é por isso que eu disse quebras. instruções de retorno não substituem continuar declarações
JasonCoder
@JasonCoder - Ah. eu entendi mal o que você quis dizer, gritos.
vai
-1

Continuar significa pular o restante do bloco e passar para o próximo item. Portanto, você pode implementar continue aplicando a condição oposta ao restante do bloco.

Por exemplo, o código na pergunta seria reescrito 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
fonte