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). |