Может ConcurrentDictionary.TryAdd потерпеть неудачу?


Это скорее академический вопрос... но может ConcurrentDictionary.TryAdd провал? И если да, то в каких случаях и почему?

3 52

3 ответа:

да может, вот условия (от msdn):

  • ArgumentNullException - когда ключ является нулевой ссылкой
  • OverflowException - при достижении максимального количества элементов
  • возвращает ложные если элемент с тем же ключом уже существует

просто повторюсь, это не имеет ничего общего с параллелизмом. Если вы беспокоитесь о двух потоках, вставляющих элемент в тогда же может произойти следующее:

  • обе вставки работают нормально, если клавиши разные
  • одна вставка работает нормально и возвращает true, другая вставка терпит неудачу (без исключения) и возвращает false. Это произойдет, если два потока пытаются вставить элемент с тем же ключом и в основном только один победит другой свободный.

конечно, может. Если ключ уже существует, метод вернет false.

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

Возвращаемое Значение система типов.Логический true, если пара ключ/значение была успешно добавлена в ConcurrentDictionary. если ключ уже существует, этот метод возвращает значение false.

Он не будет работать, когда ключ уже существует в словаре.

Если значение не может быть добавлено из-за нехватки памяти, вы получите исключение вместо этого.