Bir Parallel.ForEach içinde 'devam et' eşdeğeri var mı?


249

Bazı kodları taşıyorum Parallel.ForEachve kodda bir hata var continue. Bir döngüde Parallel.ForEachişlevsel olarak eşdeğerde kullanabileceğim bir şey var mı ?continueforeach

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

Yanıtlar:


414
return;

(gövde yalnızca her öğe için çağrılan bir işlevdir)


23

Döngünüzü Parallel.Foreach mantığı için uyumlu bir tanıma dönüştürdüğünüzde, deyim gövdesini lambda haline getirmiş olursunuz. Bu, Paralel işlev tarafından çağrılan bir eylemdir.

Yani, yerine continueile returnve ile kırmak Stop()ya da Break()ifadeleri.


1
Kesmeleri return ifadeleriyle değiştirmekten daha iyi bir seçenek ParallelLoopState'in Stop () ve Break () yöntemidir. blogs.msdn.com/b/pfxteam/archive/2009/05/27/9645023.aspx
JasonCoder

@ JasonCoder bunlardan hiçbiri buna eşdeğer değil continue.
olacaktır

1
@ doğru olacak, bu yüzden ara verdim dedim. dönüş ifadeleri devam ifadelerinin yerini alıyor
JasonCoder

@JasonCoder - Ah. Ne demek istediğini yanlış anladım, whoops.
olacak

-1

Devam etmek, bloğun geri kalanını atlamak ve bir sonraki öğeye geçmek anlamına gelir. Böylece bloğun geri kalanına zıt koşulu uygulayarak devam etmeyi uygulayabilirsiniz.

Örneğin, sorudaki kod şu şekilde yeniden yazılır:

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
    }

});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.