79

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

4

3 回答 3

117

是的,可以,这里是条件(来自 msdn):

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

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

  • 如果键不同,两个插入都可以正常工作。
  • 一个插入工作正常并返回 true,另一个插入失败(无一例外)并返回 false。如果两个线程尝试插入具有相同键的项目并且基本上只有一个会赢而另一个会输,就会发生这种情况。
于 2012-07-16T09:57:44.303 回答
8

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

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

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

于 2012-07-16T09:54:57.147 回答
2

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

如果由于内存不足而无法添加该值,则会出现异常。

于 2012-07-16T09:56:40.717 回答