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