我有兩個阻塞集合 - 一個比另一個更高的優先級。如果我使用TryTakeFromAny並首先指定更高優先級的BlockingCollection,是否可以保證首先查看更高優先級的隊列?C#BlockingCollection的TryTakeFromAny是否保證對BlockingCollection對象的順序檢查?
3
A
回答
4
這沒有記錄,所以我會說不能保證它在將來不會改變。可能不建議長期依賴它。但是,BlockingCollection<T>.TryTakeFromAny
目前通過對一個項目進行索引檢查(它檢查Count是否大於0,然後是TryTake
)來遍歷所有集合,從而進行快速檢查。如果沒有找到物品,它會爲每個集合獲取一個內部等待句柄,並將它們傳遞給WaitHandle.WaitAny
。這提供了保證:
此方法返回任何句柄信號。如果在調用過程中有多個對象發出信號,那麼返回值就是所有信號對象的索引值最小的帶信號對象的數組索引。
所以當前的實現的確會按要求運行。如果兩個集合同時獲得一個項目,則索引較低的索引將被採用。
+0
謝謝你的詳細解釋。 – Salil 2014-10-20 18:47:21
相關問題
- 1. 元素順序BlockingCollection <>
- 2. 檢查Enum對象是否在另一個Enum對象之後順序檢查?
- 3. 多個消費者和查詢C#BlockingCollection
- 4. BlockingCollection類:線程是否產生Take塊?
- 5. BlockingCollection + UI線程
- 6. wbem查詢是否對結果順序提供任何保證?
- 7. BlockingCollection和CancellationToken通過
- 8. BlockingCollection最大尺寸
- 9. 線程池與BlockingCollection
- 10. BlockingCollection,競態條件?
- 11. 對於單生產者,我應該使用BlockingCollection還是ConcurrentQueue?
- 12. 對於.net 4.0上BlockingCollection的非常特殊的例外
- 13. C#BlockingCollection <T>類統計
- 14. c#BlockingCollection導致內存不足
- 15. 檢查對象有順序使用LINQ
- 16. 從BlockingCollection中刪除項目
- 17. 無法創建BlockingCollection陣列
- 18. 如何使BlockingCollection可觀察?
- 19. 使用BlockingCollection排隊任務
- 20. 如何檢查對象是否是Cocoa中的Foundation對象?
- 21. 是否保證KeyListeners的調用順序?
- 22. FieldInfo [] Type.GetFields()的順序是否有保證?
- 23. 如何檢查是否一個對象集合包含給定的順序
- 24. 目標C,檢查是否對象是不確定的或零
- 25. 檢查對象爲空,則檢查是否該對象保持不空引用到另一個對象
- 26. 保留所選對象的順序
- 27. LinqToSql中的子查詢是否保證與它們的父對象的順序相同?
- 28. 如何檢查對象是否在Domain對象的集合中?
- 29. 檢查對象是否在相關對象的QuerySet中
- 30. laravel檢查是否對象是
我假設你的意思是'BlockingCollection',而不是'BlockingQueue'。 – 2014-10-20 18:39:35
是的,你是對的。我會相應地改變。 – Salil 2014-10-20 18:47:53