.NET的ConcurrentDictionary的哪些成员是线程安全的?

Pet*_*ter 10 .net c# concurrency multithreading concurrentdictionary

System.Collections.Concurrent.ConcurrentDictionary的MSDN文档说:

线程安全

所有公共成员和受保护成员ConcurrentDictionary<TKey,?TValue>都是线程安全的,可以从多个线程同时使用.然而,构件通过接口中的一个访问的ConcurrentDictionary<TKey,?TValue>器具,包括扩展方法,不保证线程安全,并且可能需要由呼叫者进行同步.

(强调我的)

这似乎是自相矛盾的."所有成员都是线程安全的.但成员[有时]不是线程安全的."

我确实理解扩展方法当然不能保证是线程安全的.

但是"通过其中一个接口访问"是什么意思呢?是TryGetValue(IDictionary<TKey, TValue>接口的成员)线程安全吗?

Dam*_*ver 5

请注意文档中包含显式接口实现的部分.例如,类实现IDictionary.Add.此方法不是该类的公共或受保护成员,但可以通过该IDictionary接口访问.正是这些成员不能保证是线程安全的.

  • @Peter - 好吧,首先,*提供*这样的保证几乎没有价值,因为如果你通过这样的接口访问它,调用代码不太可能使用保证(因为其他实现不会提供)这样的保证). (4认同)