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;
});

Respostas:


414
return;

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


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().


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
    }

});
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.