Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 58026|Respuesta: 2

[Fuente] ConcurrentDictionary soporta actualizaciones nuevas y actualizadas

[Copiar enlace]
Publicado en 13/7/2016 11:12:05 | | |
Entorno de desarrollo: .NET 4.0 o superior

Nota:
El espacio de nombres System.Collections.Concurrent dentro de .NET Framework 4.
Como en la documentación MSDN, ConcurrentDictionary implementa una colección segura de hilos que puede ser accedida por varios hilos al mismo tiempo.
ConcurrentDictionary implementa IDictionary<TKey, TValue>, y cuenta con algunos mecanismos únicos para sumar y actualizar clave/valor. (A continuación se explica cuándo y qué método utilizar)

Escenario 1: Añadir un nuevo elemento, solo si la clave no existe en el diccionario...
Usa TryAdd. TryAdd acepta la clave y el valor añadidos al diccionario, devuelve fasle si la clave no existe en el diccionario; Retorna verdadero si está presente.
public bool TryAdd(clave TKey, valor TValue)

Situación 2: Actualizar la clave existente en el Valor... del diccionario...
Usa TryUpdate. Si el diccionario tiene esta clave y ofrece una actualización condicional, debería dar un valor de comparación en este método que puede actualizarse cuando el valor actual sea equivalente al valor de comparación (TValue comparisonValue).
public bool TryUpdate (clave TKey, TValue newValue, TValue comparisonValue)


Situación 3: Es necesario añadir una clave/valor al diccionario; Si la clave no está segura de si existe en el diccionario; Si existe, actualiza. Si no existe, añádela...

Usa AddOrUpdate. AddOrUpdate tiene dos sobrecargas, y las dos sobrecargas devolven el valor del valor:
El primer parámetro sobrecargado es AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
Los parámetros son Clave y dos delegados; El propósito del primer delegado es delegar cuando la clave no existe y devolver el valor (valor inicial). Esta función de delegación devuelve < valor inicial, clave>.
La segunda función de delegado < devuelve Value, key, oldValue> y ejecuta el primer delegado si la clave no existe en el diccionario (si existe, no se ejecuta; El propósito es dar al valor el valor inicial), y luego devolverá el valor (el valor inicial del valor); La segunda delegación es un método para cambiar el valor del valor, que también requiere devolver el valor (cambiar el valor inicial por el valor final). Func < devolver el > Valor, clave, viejoValor
Public TValue AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)

                 2. El parámetro de la segunda sobrecarga es AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)
El primer parámetro es clave, el segundo es cuando la clave no existe, este valor es el valor inicial del valor, y el tercero es delegar para ejecutar el cambio (Func< devuelve Valor, clave, valor antiguo>).
                      Public TValue AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)

Situación 4: Añadir el valor de la clave al diccionario, pero si la clave ya existe, eliminar el valor; De lo contrario, se añadirá
Primera sobrecarga: GetOrAdd(TKEY, Func<TKey, TValue>valueFactory)
El primer parámetro es clave, el segundo parámetro es Func<valor, clave>, cuando la clave no existe, se pasa una variable como clave y el valor cambia. y crear una clave y un valor, devolviendo un valor de valor.

       2. Segunda sobrecarga: GetOrAdd (TKEY, TValue)
El primer parámetro es clave, y el propósito del segundo parámetro es crear un nuevo valor dado por la clave cuando no existe. Devuelve el valor.
Public TValue Getor Add(TKEY,Func<TKey, TValue>valueFactory)
TV pública Getor Add(TKEY, TValue)


Cada operación de AddOrUpdate y GetOrAdd es un método que ConcurrentDictionary tiene para modificar o escribir en el diccionario, lo que garantiza la seguridad de los hilos (se hace de forma sin bloqueo, leyendo datos en el diccionario).




Anterior:Consulta multicondicional LINQ donde se construye la condición
Próximo:Windows debajo de los comandos básicos de operación Memcached
 Propietario| Publicado en 13/9/2016 13:33:25 |
ConcurrentDictionary vs. Dictionary+Locking - Dennis Gao
http://www.itsvse.com/thread-3106-1-1.html
(Fuente: Code Agriculture Network)
 Propietario| Publicado en 23/3/2021 11:32:18 |
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com