Ambiente di sviluppo: .NET 4.0 o superiore
Nota: Lo spazio di nomi System.Collections.Concurrent all'interno di .NET Framework 4. Come nella documentazione MSDN, ConcurrentDictionary implementa una raccolta thread-safe che può essere accessibile da più thread contemporaneamente. ConcurrentDictionary implementa IDictionary<TKey, TValue>, e ha alcuni meccanismi unici per aggiungere e aggiornare chiavi/valore. (Di seguito è una spiegazione di quando e quale metodo utilizzare)
Scenario 1: Aggiungi un nuovo elemento, solo se la chiave non esiste nel dizionario... Usa TryAdd. TryAdd accetta la chiave e il valore aggiunti al dizionario, restituisce fasle se la chiave non esiste nel dizionario; Ritorni veri se presenti. public bool TryAdd(chiave TKey, valore TValue)
Situazione 2: Aggiornare la chiave esistente nel Valore... del dizionario... Usa TryUpdate. Se il dizionario ha questa chiave e fornisce un aggiornamento condizionale, dovrebbe fornire un valore di confronto in questo metodo che può essere aggiornato quando il valore corrente è equivalente al valore di confronto (TValue comparisonValue). public bool TryUpdate (TKey key, TValue newValue, TValue comparisonValue)
Situazione 3: È necessario aggiungere una chiave/valore al dizionario; Se la chiave non è sicura che esista nel dizionario; Se esiste, aggiorna. Se non esiste, aggiungilo...
Usa AddOrUpdate. AddOrUpdate ha due sovraccarichi, e i due sovraccarichi restituiscono il valore del valore: Il primo parametro sovraccarico è AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>) I parametri sono Key e due delegati; Lo scopo del primo delegato è delegare quando la chiave non esiste e restituire il valore (valore iniziale). Questa Funzione di delegazione restituisce < valore iniziale, chiave>. Il secondo delegato Func < restituisce Value, key, oldValue> ed esegue il primo delegato se la chiave non esiste nel dizionario (se esiste, non viene eseguita; Lo scopo è dare al valore il valore iniziale), e poi restituirà il valore (il valore iniziale del valore); La seconda delega è un metodo per modificare il valore del valore, che richiede anche di restituire il valore (cambiare il valore iniziale con il valore finale). Func < restituire il > Value, key, oldValue Public TValue AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
2. Il parametro del secondo sovraccarico è AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>) Il primo parametro è la chiave, il secondo è quando la chiave non esiste, questo valore è il valore iniziale del valore, e il terzo è delegato per eseguire la modifica (Func< restituisce Valore, chiave, vecchioValore>). Public TValue AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)
Situazione 4: Aggiungi il valore della chiave al dizionario, ma se la chiave esiste già, togli il valore; Altrimenti, verrà aggiunto Primo sovraccarico: GetOrAdd(TKEY, Func<TKey, TValue>valueFactory) Il primo parametro è la chiave, il secondo parametro è delegato Func<valore, chiave>, quando la chiave non esiste, una variabile viene passata come chiave e il valore viene modificato. e crea una chiave e un valore, restituendo un valore di valore.
2. Secondo sovraccarico: GetOrAdd (TKEY, TValue) Il primo parametro è la chiave, e lo scopo del secondo parametro è creare un nuovo valore dato dalla chiave quando essa non esiste. Restituisce valore. TValue pubblica Getor Add(TKEY, Func<TKey, TValue>valueFactory) TValue pubblica GetOrAdd(TKEY, TValue)
Ogni operazione di AddOrUpdate e GetOrAdd è un metodo che ConcurrentDictionary utilizza per modificare/scrivere nel dizionario, garantendo la sicurezza dei thread (viene fatto in modo senza blocco, leggendo i dati nel dizionario). |