我有30多個可以並行執行的任務。
我爲每個任務使用ThreadPool。
但是,在所有任務完成之前,父函數不應該返回。從線程池加入線程
我需要一個線程同步處理時,其計數到達0 類似的東西會釋放的WaitOne:
foo.StartWith(myTasks.Count);
foreach (var task in myTasks) {
ThreadPool.QueueUserWorkItem(state => { task(state); foo.Release(); });
}
foo.WaitOne();
Semaphore
感覺不錯,只是無法弄清楚如何在這裏使用它。
不把它作爲答案,因爲它與你的問題相切,但如果你使用BeginInvoke而不是作爲線程池項目開始這些任務,你可以從AysncResults中獲得WaitHandles,並且在它們上調用WaitAll。如果線程池的優點超過了這個,那麼這不是一個很好的答案,但是如果沒有,那麼值得一看。 – 2010-08-11 01:10:28