Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 58026|Antwoord: 2

[Bron] ConcurrentDictionary ondersteunt nieuwe en bijgewerkte updates

[Link kopiëren]
Geplaatst op 13-07-2016 11:12:05 | | |
Ontwikkelomgeving: .NET 4.0 of hoger

Opmerking:
De System.Collections.Concurrent naamruimte binnen .NET Framework 4.
Zoals in de MSDN-documentatie implementeert ConcurrentDictionary een thread-safe collectie die door meerdere threads tegelijk toegankelijk kan worden.
ConcurrentDictionary implementeert IDictionary<TKey, TValue> en heeft enkele unieke mechanismen voor het toevoegen en bijwerken van sleutel/waarde. (Hieronder volgt een uitleg van wanneer en welke methode te gebruiken)

Scenario 1: Voeg een nieuw item toe, alleen als de sleutel niet in het woordenboek bestaat...
Gebruik TryAdd. TryAdd accepteert de sleutel en waarde die aan het woordenboek zijn toegevoegd, geeft fasle terug als de sleutel niet in het woordenboek bestaat; Geeft waar terug als aanwezig.
publieke bool TryAdd (TKey key, TValue waarde)

Situatie 2: Werk de bestaande sleutel bij in de Waarde van het woordenboek...
Gebruik TryUpdate. Als het woordenboek deze sleutel heeft en een voorwaardelijke update geeft, zou het in deze methode een vergelijkingswaarde moeten geven die kan worden bijgewerkt wanneer de huidige waarde gelijk is aan de vergelijkingswaarde (TValue comparisonValue).
publieke bool TryUpdate(TKey key, TValue newValue, TValue comparisonValue)


Situatie 3: Er moet een sleutel/waarde aan het woordenboek worden toegevoegd; Als de sleutel niet zeker is of deze in het woordenboek bestaat; Als het bestaat, update Als het niet bestaat, voeg het toe...

Gebruik AddOrUpdate. AddOrUpdate heeft twee overloads, en deze twee overloads geven de waarde van de waarde terug:
De eerste overbelaste parameter is AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
De parameters zijn Key en twee afgevaardigden; Het doel van de eerste delegate is om te delegeren wanneer de sleutel niet bestaat en de waarde (beginwaarde) terug te geven. Deze delegatiefunc geeft < beginwaarde terug, key>.
De tweede delegate Func < geeft Value, key, oldValue> en voert de eerste delegate uit als de sleutel niet in het woordenboek bestaat (als hij bestaat, draait hij niet; Het doel is om de waarde de beginwaarde te geven), en vervolgens zal het de waarde (de beginwaarde van de waarde) teruggeven; De tweede delegatie is een methode om de waardewaarde te wijzigen, wat ook een retourwaarde vereist (verander de beginwaarde naar de eindwaarde). Func < de > Value, key, oldValue teruggeven
publieke TValue AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)

                 2. De parameter van de tweede overload is AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)
De eerste parameter is key, de tweede is wanneer de key niet bestaat, deze waarde is de beginwaarde van value, en de derde is delegate is om de wijziging uit te voeren (Func< geeft Value, key, oldValue> terug).
                      publieke TValue AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)

Situatie 4: Voeg de waarde van de sleutel toe aan het woordenboek, maar als de sleutel al bestaat, haal de waarde eruit; Anders wordt het toegevoegd
Eerste overload: GetOrAdd(TKEY, Func<TKey, TValue>valueFactory)
De eerste parameter is key, de tweede parameter wordt gedelegeerd Func<waarde, key>, wanneer de key niet bestaat, wordt een variabele als key doorgegeven en wordt de waarde gewijzigd. en creëer een sleutel en waarde, die een waardewaarde teruggeven.

       2. Tweede Overload: GetOrAdd (TKEY, TValue)
De eerste parameter is key, en het doel van de tweede parameter is om een nieuwe waarde te creëren die door de key wordt gegeven wanneer deze niet bestaat. Geeft waarde terug.
publieke TValue GetOrAdd(TKEY,Func<TKey, TValue>valueFactory)
publieke TValue GetOrAdd(TKEY,TValue)


Elke bewerking van AddOrUpdate en GetOrAdd is een methode die ConcurrentDictionary heeft om het woordenboek aan te passen/schrijven, wat de veiligheid van threads waarborgt (dit gebeurt op een lockless manier, waarbij data in het woordenboek wordt gelezen).




Vorig:LINQ multi-conditionele query waarbij de conditie wordt geconstrueerd
Volgend:Windows onder Memcached basisbedieningscommando's
 Huisbaas| Geplaatst op 13-09-2016 13:33:25 |
ConcurrentDictionary vs. Dictionary+Locking - Dennis Gao
http://www.itsvse.com/thread-3106-1-1.html
(Bron: Code Agriculture Network)
 Huisbaas| Geplaatst op 23-03-2021 11:32:18 |
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com