Apakah ada yang setara dengan 'melanjutkan' secara paralel. FOREach?

249

Saya memindahkan beberapa kode ke Parallel.ForEachdan mendapat kesalahan dengan continuekode yang saya miliki. Apakah ada sesuatu yang setara yang dapat saya gunakan dalam Parallel.ForEachfungsi yang setara continuedalam satu foreachlingkaran?

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

Jawaban:

414
return;

(tubuh hanya fungsi yang dipanggil untuk setiap item)

dave
sumber
23

Ketika Anda mengonversi perulangan Anda menjadi definisi yang kompatibel untuk logika Paralel.Foreach, Anda akhirnya membuat badan pernyataan lambda. Ya, itu adalah tindakan yang dipanggil oleh fungsi Paralel.

Jadi, ganti continuedengan return, dan hancurkan dengan Stop()atau Break()pernyataan.

Taran
sumber
1
Opsi yang mungkin lebih baik daripada mengganti istirahat dengan pernyataan kembali adalah ParallelLoopState's Stop () dan Break (). blogs.msdn.com/b/pfxteam/archive/2009/05/27/9645023.aspx
JasonCoder
@JasonCoder tidak satupun yang setara dengan continuesekalipun.
akan
1
@ akan benar, itulah sebabnya saya katakan istirahat. pernyataan pengembalian memang menggantikan pernyataan terus
JasonCoder
@JasonCoder - Ah. Saya salah mengerti apa yang Anda maksud, wah.
akan
-1

Untuk melanjutkan itu berarti melompati sisa blok dan pindah ke item berikutnya. Jadi, Anda bisa menerapkan melanjutkan dengan menerapkan kondisi yang berlawanan ke sisa blok.

Misalnya, kode dalam pertanyaan akan ditulis ulang sebagai:

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
sumber