我聽說在多線程中使用waitall有限制(線程數等待?)。任何人都能提供細節?WaitAll限制
2
A
回答
2
我認爲你所指的限制不是線程數;它正等待處理的數量。從MSDN page爲WaitHandle.WaitAll(WaitHandle[])
:
在一些實施中,如果超過64 句柄傳遞,一個 NotSupportedException異常被拋出。
在個別情況下,這一問題也隨之而來,我通常圍繞它的工作有:
WaitHandle[] handles = ...
foreach(var waitHandle in handles)
waitHandle.WaitOne();
爲了完整起見,其他限制似乎是:
如果陣列包含重複項, 調用失敗, DuplicateWaitObjectException。
具有STAThreadAttribute的 線程不支持WaitAll方法。
1
您是否想過一個winform應用程序的STA(單線程公寓)限制?
如果是這樣,我只需在每個線程完成處理後檢查'工作隊列'是否爲空,然後在主線程擁有的單個ManualResetEvent對象上調用.WaitOne()而不是使用.WaitAll ()。
像這樣:
moSolverEvent = new ManualResetEvent(false);
ProcessResult(new SolverWorkInProgress());
//Wait here until the last background thread reports in
moSolverEvent.WaitOne();
然後工作線程,這樣做:
if (mhSolverWorkQueue.Count == 0) moSolverEvent.Set();
它工作尤爲突出,避免了爲WaitAll(任何問題),即使在WinForms應用程序。畢竟,你並沒有真的等待線程完成......你正在等待工作完成。 :-)
只要確保對這些對象中的每一個都做適當的鎖定,這樣你的線程就不會彼此重複。
相關問題
- 1. 線程池 - 爲WaitAll 64句柄限制
- 2. WaitAll和WaitAny
- 3. WaitAll阻止UI
- 4. .Net並行WaitAll()
- 5. C#的IAsyncResult爲WaitAll
- 6. 比較加入和WaitAll
- 7. C#的WaitHandle取消了WaitAll
- 8. WaitAll和Wait之間的區別
- 9. 如何使用Akka.Net執行WaitAll?
- 10. WaitAll後再次發射任務
- 11. LDAP限制大小限制
- 12. PHP XML限制 - $ _POST限制
- 13. Silverlight限制/限制列表
- 14. heroku的限制和限制
- 15. NUnit控制檯錯誤:「WaitAll不支持STA線程上的多個句柄」
- 16. 限制
- 17. 限制
- 18. 限制
- 19. 限制
- 20. 限制
- 21. 限制
- 22. 限制
- 23. 限制
- 24. OpenHFT ChronicleMap內存的限制和限制
- 25. Azure實例限制和大小限制
- 26. 限制亞馬遜s3限制預算
- 27. SQL限制總數與限制列
- 28. 限制記錄和放置限制
- 29. Silverstripe - FieldSet和FormAction限制?增加限制?
- 30. 速率限制如何限制API
我從未聽說過這種限制.. – caesay 2010-11-16 03:41:20