Environnement de développement : .NET 4.0 ou supérieur
Note : L’espace de noms System.Collections.Concurrent dans .NET Framework 4. Comme dans la documentation MSDN, ConcurrentDictionary implémente une collection thread-safe accessible simultanément par plusieurs threads. ConcurrentDictionary implémente IDictionary<TKey, TValue>, et dispose de mécanismes uniques pour additionner, mettre à jour clé/valeur. (Voici une explication du moment et de la méthode à utiliser)
Scénario 1 : Ajouter un nouvel élément, seulement si la clé n’existe pas dans le dictionnaire... Utilisez TryAdd. TryAdd accepte la clé et la valeur ajoutées au dictionnaire, renvoie le fasle si la clé n’existe pas dans le dictionnaire ; Retour vrai s’il est présent. public bool TryAdd(clé TKey, valeur TValue)
Situation 2 : Mettre à jour la clé existante dans la Valeur du dictionnaire... Utilisez TryUpdate. Si le dictionnaire possède cette clé et fournit une mise à jour conditionnelle, il devrait donner une valeur de comparaison dans cette méthode qui peut être mise à jour lorsque la valeur actuelle est équivalente à la valeur de comparaison (TValue comparisonValue). public bool TryUpdate(TKey key, TValue newValue, TValue comparisonValue)
Situation 3 : Une clé/valeur doit être ajoutée au dictionnaire ; Si la clé n’est pas certaine d’exister dans le dictionnaire ; Si ça existe, mise à jour Si ça n’existe pas, ajoutez-le...
Utilisez AddOrUpdate. AddOrUpdate comporte deux surcharges, et ces deux surcharges retournent la valeur de la valeur : Le premier paramètre surchargé est AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>) Les paramètres sont : Clé et deux délégués ; Le but du premier délégué est de déléguer lorsque la clé n’existe pas et de retourner la valeur (valeur initiale). Cette fonction de délégation retourne < valeur initiale, la clé>. Le second délégué Func < retourne Value, key, oldValue> et exécute le premier délégué si la clé n’existe pas dans le dictionnaire (si elle existe, elle ne s’exécute pas ; Le but est de donner à la valeur la valeur initiale), puis elle retournera la valeur (la valeur initiale de la valeur) ; La seconde délégation est une méthode pour modifier la valeur de la valeur, ce qui nécessite également de retourner la valeur (changer la valeur initiale par la valeur finale). Func < retourner la > Value, key, oldValue public TValue AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
2. Le paramètre de la seconde surcharge est AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>) Le premier paramètre est clé, le second est lorsque la clé n’existe pas, cette valeur est la valeur initiale de la valeur, et le troisième est le délégué est d’exécuter le changement (Func< retourne Value, key, oldValue>). public TValue AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)
Situation 4 : Ajouter la valeur de la clé au dictionnaire, mais si la clé existe déjà, retirer la valeur ; Sinon, il sera ajouté Première surcharge : GetOrAdd(TKEY, Func<TKey, TValue>valueFactory) Le premier paramètre est la clé, le second est délégué Func<valeur, clé>, lorsque la clé n’existe pas, une variable est passée en clé et la valeur est modifiée. et crée une clé et une valeur, en retournant une valeur de valeur.
2. Deuxième surcharge : GetOrAdd (TKEY, TValue) Le premier paramètre est la clé, et le but du second paramètre est de créer une nouvelle valeur donnée par la clé lorsqu’elle n’existe pas. Retour de la valeur. public TValue GetOrAdd(TKEY,Func<TKey, TValue>valueFactory) TV publique Getor Add(TKEY, TValue)
Chaque opération d’AddOrUpdate et GetOrAdd est une méthode que ConcurrentDictionary utilise pour modifier/écrire dans le dictionnaire, ce qui garantit la sécurité des threads (cela se fait de manière sans verrouillage, en lisant les données du dictionnaire). |