Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 58026|Svar: 2

[Källa] ConcurrentDictionary stödjer nya och uppdaterade uppdateringar

[Kopiera länk]
Publicerad på 2016-07-13 11:12:05 | | |
Utvecklingsmiljö: .NET 4.0 eller högre

Notera:
System.Collections.Concurrent-namnrymden inom .NET Framework 4.
Precis som i MSDN-dokumentationen implementerar ConcurrentDictionary en trådsäker samling som kan nås av flera trådar samtidigt.
ConcurrentDictionary implementerar IDictionary<TKey, TValue>, och har några unika mekanismer för att lägga till och uppdatera nyckel/värde. (Nedan följer en förklaring av när och vilken metod man ska använda)

Scenario 1: Lägg till ett nytt objekt, endast om nyckeln inte finns i ordboken...
Använd TryAdd. TryAdd accepterar nyckeln och värdet som läggs till i ordboken, returnerar fasle om nyckeln inte finns i ordboken; Returnerar true om det är närvarande.
public bool TryAdd (TKey-nyckel, TValue-värde)

Situation 2: Uppdatera den befintliga nyckeln i ordbokens Värde...
Använd TryUpdate. Om ordboken har denna nyckel och ger en villkorlig uppdatering, bör den i denna metod ge ett jämförelsevärde som kan uppdateras när det aktuella värdet är ekvivalent med jämförelsevärdet (TValue comparisonValue).
public bool TryUpdate(TKey key, TValue newValue, TValue comparisonValue)


Situation 3: En nyckel/värde måste läggas till i ordboken; Om nyckeln inte är säker på om den finns i ordboken; Om det finns, uppdatera Om det inte finns, lägg till det...

Använd AddOrUpdate. AddOrUpdate har två överbelastningar, och de två överbelastningarna returnerar värdet av värdet:
Den första överbelastade parametern är AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
Parametrarna är Key och två delegater; Syftet med den första delegaten är att delegera när nyckeln inte finns och returnera värdet (initialvärdet). Denna delegeringsfunktion returnerar < initialvärde, nyckel>.
Den andra delegaten Func < returnerar Value, key, oldValue> och exekverar den första delegaten om nyckeln inte finns i ordboken (om den finns, körs den inte; Syftet är att ge värdet initialvärdet), och sedan returnerar det värdet (initialvärdet av värdet); Den andra delegeringen är en metod för att ändra värdevärdet, vilket också kräver returvärde (ändra initialvärdet till slutvärdet). Func < returnera > Value, key, oldValue
public TValue AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)

                 2. Parametern för den andra överbelastningen är AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)
Den första parametern är nyckeln, den andra är när nyckeln inte existerar, detta värde är initialvärdet för värdet, och det tredje är delegat är att utföra förändringen (Func< returnerar Värde, nyckel, gammalt värde>).
                      public TValue AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)

Situation 4: Lägg till nyckelns värde i ordboken, men om nyckeln redan finns, ta bort värdet; Annars kommer den att läggas till
Första överbelastningen: GetOrAdd(TKEY, Func<TKey, TValue>valueFactory)
Den första parametern är nyckel, den andra parametern delegeras Func<värde, nyckel>, när nyckeln inte finns skickas en variabel som nyckel och värdet ändras. och skapa en nyckel och ett värde, vilket returnerar ett värdevärde.

       2. Andra överbelastningen: GetOrAdd (TKEY, TValue)
Den första parametern är nyckel, och syftet med den andra parametern är att skapa ett nytt värde som ges av nyckeln när det inte existerar. Avkastningsvärde.
public TValue GetOrAdd(TKEY,Func<TKey, TValue>valueFactory)
offentlig TValue GetOrAdd (TKEY, TValue)


Varje operation av AddOrUpdate och GetOrAdd är en metod som ConcurrentDictionary har för att modifiera/skriva till ordboken, vilket säkerställer trådsäkerhet (det görs på ett låslöst sätt, där data läses i ordboken).




Föregående:LINQ multi-villkorad fråga där villkoret konstrueras
Nästa:Windows under Memcachede grundläggande operationskommandon
 Hyresvärd| Publicerad på 2016-09-13 13:33:25 |
ConcurrentDictionary vs. Dictionary+Locking - Dennis Gao
http://www.itsvse.com/thread-3106-1-1.html
(Källa: Code Agriculture Network)
 Hyresvärd| Publicerad på 2021-03-23 11:32:18 |
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com