ConcurrentDictionary.TryAdd可以失败吗?

时间:2012-07-16 09:51:32

标签: c# concurrentdictionary

这更像是一个学术问题......但ConcurrentDictionary.TryAdd会失败吗?如果是这样,在什么情况下以及为什么?

3 个答案:

答案 0 :(得分:86)

是的,可以,这是条件(from msdn):

  • ArgumentNullException - 当键为空引用时
  • OverflowException - 达到最大元素数时
  • 如果已存在具有相同键的元素
  • ,则返回 false

重申一下,这与并发性无关。如果您担心两个线程同时插入一个项目,则可能发生以下情况:

  • 如果密钥不同,两个插件都可以正常工作
  • 一个插件工作正常并返回true,另一个插件失败(没有异常)并返回false。如果两个线程尝试插入具有相同键的项目,并且基本上只有一个线程将赢得另一个松散,则会发生这种情况。

答案 1 :(得分:7)

当然可以。如果密钥已存在,则该方法将返回false。

参考:http://msdn.microsoft.com/en-us/library/dd267291.aspx

返回值 键入:System.Boolean 如果键/值对已成功添加到ConcurrentDictionary,则为true。 如果密钥已存在,则此方法返回false。

答案 2 :(得分:2)

当密钥已存在于字典中时,它将失败。

如果因为耗尽内存而无法添加该值,则会收到异常。