Bagaimana saya bisa menunggu sampai Parallel.ForEach selesai

122

Saya menggunakan TPL dalam proyek saya saat ini dan menggunakan Parallel.Foreach untuk memutar banyak utas. Kelas Tugas berisi Wait () untuk menunggu sampai tugas diselesaikan. Seperti itu, bagaimana saya bisa menunggu Parallel.ForEach selesai dan kemudian menjalankan pernyataan berikutnya?

VJAI
sumber

Jawaban:

193

Anda tidak perlu melakukan sesuatu yang istimewa, Parallel.Foreach()akan menunggu sampai semua tugas yang bercabang selesai. Dari thread pemanggil, Anda dapat memperlakukannya sebagai pernyataan sinkron tunggal dan misalnya membungkusnya di dalam try / catch.

Henk Holterman
sumber
10
"Parallel.Foreach () akan menunggu sampai semua tugas yang bercabang selesai" ini dapat membingungkan dalam beberapa situasi, seperti (tugas asinkron di dalam): Parallel.ForEach (groupedUnreadMessages, async unreadMsgCollection => {/ * works * /});
Bo HU
berikut adalah masalah lain dalam stackoverflow: stackoverflow.com/questions/11564506/…
Bo HU
4
Jawaban ini dari 2011, sebelum async / await. Tapi seperti yang saya katakan, benang pemijahan di dalam ForEach bukanlah ide yang bagus. Tidak ada Tindakan asinkron. Tautan yang Anda posting memberikan info dan solusi yang baik.
Henk Holterman
1
"benang pemijahan di dalam ForEach bukanlah ide yang bagus" bisakah Anda mengembangkannya? Apakah itu "kecuali Anda memastikan Anda menunggu sebelum kembali"?
Gianthra
16

Anda tidak memerlukannya dengan Parallel.Foreach: ini hanya mengeksekusi foreach di utas sebanyak mungkin prosesor tersedia, tetapi mengembalikan secara sinkron.

Informasi lebih lanjut dapat ditemukan di sini

Louis Kottmann
sumber