Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 58026|Risposta: 2

[Fonte] ConcurrentDictionary supporta aggiornamenti nuovi e aggiornati

[Copiato link]
Pubblicato su 13/07/2016 11:12:05 | | |
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).




Precedente:Query multicondizionale LINQ in cui la condizione è costruita
Prossimo:Finestre sotto i comandi base di operazione Memcached
 Padrone di casa| Pubblicato su 13/09/2016 13:33:25 |
Dizionario Concorrente vs. Dizionario + Bloccaggio - Dennis Gao
http://www.itsvse.com/thread-3106-1-1.html
(Fonte: Code Agriculture Network)
 Padrone di casa| Pubblicato su 23/03/2021 11:32:18 |
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com