Utviklingsmiljø: .NET 4.0 eller høyere
Merk: System.Collections.Concurrent-navnerommet i .NET Framework 4. Som i MSDN-dokumentasjonen implementerer ConcurrentDictionary en trådsikker samling som kan nås av flere tråder samtidig. ConcurrentDictionary implementerer IDictionary<TKey, TValue>, og har noen unike mekanismer for å legge til og oppdatere nøkkel/verdi. (Nedenfor er en forklaring på når og hvilken metode du bør bruke)
Scenario 1: Legg til et nytt element, bare hvis nøkkelen ikke finnes i ordboken... Bruk TryAdd. TryAdd aksepterer nøkkelen og verdien lagt til ordboken, returnerer fasle hvis nøkkelen ikke finnes i ordboken; Returnerer true hvis det er til stede. offentlig bool TryAdd (TKey key, TValue value)
Situasjon 2: Oppdater den eksisterende nøkkelen i ordbokens Verdi... Bruk TryUpdate. Hvis ordboken har denne nøkkelen og gir en betinget oppdatering, bør den gi en sammenligningsverdi i denne metoden som kan oppdateres når den nåværende verdien er ekvivalent med sammenligningsverdien (TValue comparisonValue). offentlig bool TryUpdate(TKey key, TValue newValue, TValue comparisonValue)
Situasjon 3: En nøkkel/verdi må legges til i ordboken; Hvis nøkkelen ikke er sikker på om den finnes i ordboken; Hvis den finnes, oppdater Hvis den ikke finnes, legg den til...
Bruk AddOrUpdate. AddOrUpdate har to overbelastninger, og de to overbelastningene returnerer verdien av verdi: Den første overbelastede parameteren er AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>) Parametrene er nøkkel og to delegater; Formålet med den første delegaten er å delegere når nøkkelen ikke eksisterer og returnere verdien (initialverdien). Denne delegasjonsfuncen returnerer < startverdi, nøkkel>. Den andre delegaten Func < returnerer Value, key, oldValue> og utfører den første delegaten hvis nøkkelen ikke finnes i ordboken (hvis den finnes, kjører den ikke; Hensikten er å gi verdien startverdien), og deretter returnerer den verdien (startverdien til verdien); Den andre delegasjonen er en metode for å endre verdien, som også krever returverdi (endre startverdien til sluttverdien). Func < returnere > Value, key, oldValue offentlig TValue AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
2. Parameteren for den andre overbelastningen er AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>) Den første parameteren er nøkkelen, den andre er når nøkkelen ikke eksisterer, denne verdien er den opprinnelige verdien av verdien, og den tredje er delegat for å utføre endringen (Func< returnerer Verdi, nøkkel, gammelVerdi>). offentlig TValue AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)
Situasjon 4: Legg til nøkkelverdien i ordboken, men hvis nøkkelen allerede eksisterer, fjern verdien; Ellers vil det bli lagt til Første overbelastning: GetOrAdd(TKEY, Func<TKey, TValue>valueFactory) Den første parameteren er nøkkel, den andre parameteren delegeres Func<verdi, nøkkel>, når nøkkelen ikke eksisterer, sendes en variabel som nøkkel, og verdien endres. og skape en nøkkel og verdi, som returnerer en verdiverdi.
2. Andre overbelastning: GetOrAdd (TKEY, TValue) Den første parameteren er nøkkel, og formålet med den andre parameteren er å lage en ny verdi gitt av nøkkelen når den ikke eksisterer. Avkastningsverdi. offentlig TValue GetOrAdd(TKEY, Func<TKey, TValue>valueFactory) offentlig TValue GetOrAdd(TKEY,TValue)
Hver operasjon i AddOrUpdate og GetOrAdd er en metode som ConcurrentDictionary har for å endre/skrive til ordboken, noe som sikrer trådsikkerhet (det gjøres på en låsløs måte, ved å lese data i ordboken). |