Parallel.ForEach tamamlanana kadar nasıl bekleyebilirim


122

Mevcut projemde TPL kullanıyorum ve birçok iş parçacığını döndürmek için Parallel.Foreach kullanıyorum. Task sınıfı, görev tamamlanana kadar beklemek için Wait () içerir. Bunun gibi, Parallel.ForEach'in tamamlanmasını ve ardından sonraki ifadeleri yürütmesini nasıl bekleyebilirim?

Yanıtlar:


193

Özel bir şey yapmanıza gerek yok, Parallel.Foreach()tüm dallanmış görevleri tamamlanana kadar bekleyeceksiniz. Çağıran iş parçacığından, onu tek bir eşzamanlı ifade olarak ele alabilir ve örneğin bir dene / yakala içine sarabilirsiniz.


10
"Parallel.Foreach (), dallanmış tüm görevleri tamamlanıncaya kadar bekleyecektir" gibi bazı durumlarda kafası karışabilir, örneğin (asenkron görev içeride): Parallel.ForEach (groupedUnreadMessages, async unreadMsgCollection => {/ * works * /});
Bo HU

stackoverflow'daki diğer sorunlar: stackoverflow.com/questions/11564506/…
Bo HU

4
Bu yanıt, eşzamansız / beklemeden önceki 2011'den alınmıştır. Ama dediğim gibi, ForEach içinde ipler oluşturmak iyi bir fikir değil. Zaman uyumsuz bir Eylem de değildir. Gönderdiğiniz bağlantılar iyi bilgi ve çözümler sağlar.
Henk Holterman

1
"ForEach içinde ipler oluşturmak iyi bir fikir değil" ifadesini genişletebilir misin? Bu "dönmeden önce beklediğinizden emin olmadığınız sürece" mi?
Gianthra

16

Parallel.Foreach ile buna ihtiyacınız yok: foreach'i yalnızca kullanılabilir işlemciler olduğu kadar çok evrede çalıştırır, ancak eşzamanlı olarak geri döner.

Daha fazla bilgiyi burada bulabilirsiniz

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.