tryadd example c# concurrentdictionary

c# - example - ¿Puede ConcurrentDictionary.TryAdd fallar?



concurrentdictionary to dictionary (3)

Esto es más una pregunta académica ... pero ¿puede fallar ConcurrentDictionary.TryAdd ? Y si es así, ¿en qué casos y por qué?


Claro que sí. Si la clave ya existe, el método devolverá false.

Ref: page

Tipo de valor de retorno: System.Boolean true si el par clave / valor se agregó exitosamente al ConcurrentDictionary. Si la clave ya existe, este método devuelve falso.


Fallará cuando la clave ya exista en el diccionario.

Si no se puede agregar el valor porque se le acaba la memoria, obtendrá una excepción.


Sí puede, aquí están las condiciones ( page ):

  • ArgumentNullException : cuando la clave es una referencia nula
  • OverflowException - cuando se alcanzó el número máximo de elementos
  • Devuelve falso si ya existe un elemento con la misma clave.

Solo para reiterar, esto no tiene nada que ver con la concurrencia. Si te preocupa que dos hilos inserten un elemento al mismo tiempo, puede suceder lo siguiente:

  • Ambas inserciones funcionan bien, si las teclas son diferentes
  • Una inserción funciona bien y devuelve true, la otra inserción falla (sin excepción) y devuelve false. Esto sucede si dos subprocesos intentan insertar un elemento con la misma clave y, básicamente, solo uno ganaría el otro.