为什么Concurrent Dictionary没有可见的Add()方法?

时间:2013-04-05 08:18:12

标签: c# multithreading dictionary concurrency

我只是想知道ConcurrentDictionary有没有可能在Visual Studio IDE中看到的Add方法。我似乎只接受了TryX方法,例如TryAdd,TryUpdate等。

我可以看到ConcurrentDictionary实现了IDictionary,如果我将其转换为IDictionary,我会收到添加方法。

我已经通过iLSpy查看了这个类,我可以看到Add方法已经完全实现,并且确实调用了引用的并发TryAdd方法。

我期待在Add方法上看到某种属性来压制它,但我没有看到任何东西。

Microsoft是否已将其烘焙到IDE中以隐藏Add方法?

如果有人能对此有所了解,我们将不胜感激

2 个答案:

答案 0 :(得分:8)

他们不鼓励使用Add方法,因为如果密钥已存在于字典中,则该方法会抛出异常。对于大多数字典,开发人员可以编写代码以保证在任何正常情况下都不会抛出异常。但是,要使用并发字典执行此操作(Contains后跟Add),您需要在访问字典的方法中使用排他锁,这会破坏整个目的并发字典。

TryAdd结合了ContainsAdd检查,无需您锁定字典,并允许您再次编写在正常情况下不会引发异常的代码。 / p>

答案 1 :(得分:7)