可以ConcurrentDictionary.TryAdd失败?

这是更多的学术问题…但可以ConcurrentDictionary.TryAdd失败? 如果是的话,在什么情况下,为什么?

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

  • ArgumentNullException – 当key为null时引用
  • OverflowException – 达到最大元素数量时
  • 如果具有相同密钥的元素已经存在,它将返回false

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

  • 如果键不同,则两个插入都可以正常工作
  • 一个插入工作正常,并返回true,另一个插入失败(没有例外),并返回false。 如果两个线程尝试使用相同的键插入项目,基本上只有一个线程会赢得另一个线程。

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

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

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

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

如果由于内存不足而无法添加该值,则会发生exception。