Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

174
Vistas
¿Cuál es el motivo del argumento compareValue en el método ConcurrentDictionary.TryUpdate?

¿Por qué necesitamos el tercer argumento comparisonValue en el método ConcurrentDictionary.TryUpdate ?

¿Y por qué la actualización no tendrá éxito si el valor ya existente no es igual al valor de comparisonValue ? ¿No podemos simplemente reemplazar el valor existente con el nuevo como en el Dictionary<,> ?

Esta es la firma:

 public bool TryUpdate(TKey key, TValue newValue, TValue comparisonValue)
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

El punto es que está usando un diccionario simultáneo para escenarios con acceso simultáneo al diccionario. No sabes quién (y cómo) cambió el diccionario mientras tanto. Pasar un valor de comparación es una forma muy simple y efectiva de hacer el cambio solo si el estado del diccionario es el mismo que esperas.

Si espera que las colisiones sean relativamente raras, esta es una forma muy eficiente y eficaz de manejar el estado compartido (no es necesario bloquear y, por lo tanto, detener todo acceso). Este patrón es la base del código sin bloqueo; lo ves incluso en el nivel de hardware. Puede buscar Comparar e intercambiar (o Comparar e intercambiar) para obtener más información.

over 4 years ago · Santiago Trujillo Denunciar

0

Si desea actualizar una clave de un ConcurrentDictionary independientemente de su valor actual, puede usar el descriptor de acceso establecido del indexador :

 var dictionary = new ConcurrentDictionary<int, string>(); dictionary[1] = "Hello"; dictionary[2] = "World"; dictionary[1] = "Goodbye"; Console.WriteLine(String.Join(", ", dictionary));

Producción:

 [1, Goodbye], [2, World]

Si cada subproceso funciona con un conjunto aislado de claves, actualizar un ConcurrentDictionary como este podría ser suficiente. Pero si varios subprocesos compiten por actualizar las mismas claves, podría surgir el caos. En esos casos, puede ser conveniente utilizar el método TryUpdate o, con mayor frecuencia, el método AddOrUpdate . Estos métodos permiten actualizar condicionalmente el diccionario, siendo la comprobación y actualización una operación atómica.

La siguiente pregunta podría ofrecer algunas ideas sobre cómo se puede usar esta API en la práctica:
¿Hay alguna forma de usar ConcurrentDictionary.TryUpdate con una expresión lambda?

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda