2010-11-01 15 views
5

'dan sonra engelleme Birkaç Paralel var.Ardışık .NET Paralel For's - Her

Şu anda her Parallel.For dönüşü değerini ParallelLoopResult inceleyerek ve IsCompleted üye true olarak ayarlanır kadar 20 milisaniye için uyuyorum.


Dim plr as ParallelLoopResult 

plr = Parallel.For(...) 

while not plr.IsCompleted 
    Thread.Sleep(20) 
end while 

plr = Parallel.For(...) 

while not plr.IsCompleted 
    Thread.Sleep(20) 
end while 

. 
. 
. 
ben döngü ve Thread.Sleep yerine bir çekirdek seviye blok (yani WaitHandle) ekleyebilir nasıl

? Parallel.For tetikleyen bir tamamlama olayı var mı? Parallel.For böyle bir mekanizma sağlar mı?

cevap

4

Parallel.For, çağrıldığı tüm kodu tamamlayacaktır. IsCompleted yalnızca false değerini döndürür, sonra döngü kesintiye uğradı. http://msdn.microsoft.com/en-us/library/system.threading.tasks.parallelloopresult.aspx itibaren

:

IsCompleted true değerini

ardından döngü döngü tüm tekrarlamalar idam edildi, öyle ki, tamamlanma koştu. IsCompleted false değerini döndürür ve LowBreakIteration null değerini döndürürse, döngüyü erken sonlandırmak için Stop'a bir çağrı kullanıldı. IsCompleted false değerini döndürürse ve LowBreakIteration, null olmayan bir integral değeri döndürürse, döngüyü zamanından önce sonlandırmak için Break kullanılır.

+0

Doğru, ancak çekirdek düzeyi yapısı kullanılarak döngü tamamlanana kadar beklemem gereken soruyu yanıtlamıyor. – ColorEyes

+0

Ama, bekleyecek bir şey yok. Sorduğun şeyin, 'IsCompleted'in değiştiğini işaret edene kadar iş parçacığını nasıl uyuyabileceğini düşün. Sorun şu ki, 'IsCompleted' Paralel.For'un tamamlanmasından sonra asla değişmeyecek. –

+0

Bir WaitHandle oluşturursam, Paralel.For tamamlandığında beklemede beklediğimi nasıl işaret edebilirim? – ColorEyes

1

gerek Sen Parallel.For() için WaitHandle uyuyamıyrom ve dont - çağrı senkrondur (çağrı bitmiş sonra tüm tekrarlamalar tamamlanacaktır). Döngüleri sadece iterasyonlarda değil, diğer iş parçacığında da çalıştırmanız gerekiyorsa, Task veya Thread içinde sarmanız gerekir ve bu nesneler beklemeli tutacaklar sağlar. Ancak, Parallel.For() (örnek kodunuzdaki gibi) ile aynı iş parçacığı üzerinde sonuç beklemek için sabırsızlanıyorsanız, herhangi bir anlam ifade etmez.