Len*_*y D 7 c# concurrency multithreading dictionary
我只是想知道ConcurrentDictionary是否有可能没有在Visual Studio IDE中可见的Add方法.我似乎只获得了TryX方法,例如TryAdd,TryUpdate等.
我可以看到ConcurrentDictionary实现IDictionary,如果我把它转换为IDictionary我得到Add方法.
我通过iLSpy查看了这个类,我可以看到Add方法已经完全实现,并且实际上是TryAdd在引擎下调用Concurrent 方法.
我期待在Add方法上看到某种属性来压制它,但我没有看到任何东西.
微软是否已将其烘焙到IDE中以隐藏Add方法?
如果有人能够对此有所了解,我们将不胜感激
他们不鼓励使用该Add方法,因为如果密钥已经存在于字典中,则该方法会抛出异常.对于大多数字典,开发人员可以编写代码以保证在任何正常情况下都不会抛出异常.但是,要使用并发字典执行此操作(Contains后跟Add),您需要在访问字典的方法中使用排它锁,这会破坏并发字典的整个目的.
TryAdd结合Contains和Add检查而不需要你锁定字典,并允许你再次编写在正常情况下不会抛出异常的代码.
这是因为显式接口实现.请参阅http://msdn.microsoft.com/en-us/library/aa288461(v=vs.71).aspx