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?

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.


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.