4
我知道ConcurrentDictionary有一個名爲ContainsKey的API,但是字典並不是我正在尋找的。 現在,我使用Enumerable中的「Contains」擴展方法,但該方法不是線程安全的。 那麼是否有任何線程安全的集合有一個「Contains」方法?.NET Framework中的哪個線程安全的集合具有「Contains」作爲其API之一?
謝謝。
我知道ConcurrentDictionary有一個名爲ContainsKey的API,但是字典並不是我正在尋找的。 現在,我使用Enumerable中的「Contains」擴展方法,但該方法不是線程安全的。 那麼是否有任何線程安全的集合有一個「Contains」方法?.NET Framework中的哪個線程安全的集合具有「Contains」作爲其API之一?
謝謝。
一般而言,Contains
操作在併發收集中不是很有用。問題在於,只要您確定集合「包含」或不包含某個對象,您作爲該檢查結果所執行的邏輯就不再有效,因爲另一個線程可能已經立即添加或刪除該項目。
ConcurrentDictionary類包含此方法來實現IDictionary,但預期的用法實際上是使用AddOrUpdate
,GetOrAdd
和類似的原子方法。
+1爲省略背後的邏輯簡潔描述 – spender 2011-04-12 01:48:59
+1本文及其後續幫助我更好地理解了這些問題:http://blogs.msdn.com/b/jaredpar/archive/2009/02/ 11 /爲什麼是線程安全集合so-hard.aspx – 2011-04-12 02:11:11
非常感謝。這解釋了我的疑惑。 – CuiPengFei 2011-04-12 05:08:56