Entwicklungsumgebung: .NET 4.0 oder höher
Hinweis: Der System.Collections.Concurrent-Namensraum innerhalb des .NET Framework 4. Wie in der MSDN-Dokumentation implementiert ConcurrentDictionary eine threadsichere Sammlung, auf die mehrere Threads gleichzeitig zugreifen können. ConcurrentDictionary implementiert IDictionary<TKey, TValue> und verfügt über einige einzigartige Mechanismen zum Hinzufügen und Aktualisieren von Schlüssel/Wert. (Nachfolgend eine Erklärung, wann und welche Methode verwendet werden sollte)
Szenario 1: Fügen Sie nur einen neuen Gegenstand hinzu, wenn der Schlüssel im Wörterbuch nicht existiert... Benutze TryAdd. TryAdd akzeptiert den Schlüssel und den zum Wörterbuch hinzugefügten Wert, gibt fasle zurück, wenn der Schlüssel im Wörterbuch nicht existiert; Es gibt True zurück, falls vorhanden. öffentlicher Bool TryAdd (TKey-Schlüssel, TValue-Wert)
Situation 2: Aktualisieren Sie den bestehenden Schlüssel im Wert des Wörterbuchs... Benutze TryUpdate. Wenn das Wörterbuch diesen Schlüssel hat und eine bedingte Aktualisierung liefert, sollte es in dieser Methode einen Vergleichswert angeben, der aktualisiert werden kann, wenn der aktuelle Wert dem Vergleichswert entspricht (TValue comparisonValue). public bool TryUpdate(TKey key, TValue newValue, TValue comparisonValue)
Situation 3: Ein Schlüssel/Wert muss dem Wörterbuch hinzugefügt werden; Wenn der Schlüssel nicht sicher ist, ob er im Wörterbuch existiert; Wenn es existiert, aktualisiere. Wenn es nicht existiert, füge es hinzu...
Verwenden Sie AddOrUpdate. AddOrUpdate hat zwei Overloads, und die beiden Overloads geben den Wert von Wert zurück: Der erste überladene Parameter ist AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>) Die Parameter sind Key und zwei Delegierte; Der Zweck des ersten Delegierten ist es, zu delegieren, wenn der Schlüssel nicht existiert, und den Wert (Anfangswert) zurückzugeben. Diese Delegation Func gibt < Anfangswert, Schlüssel>, zurück. Der zweite Delegate Func < gibt Value, key, oldValue> zurück und führt den ersten Delegaten aus, falls der Schlüssel im Dictionary nicht existiert (falls vorhanden, läuft er nicht; Ziel ist es, dem Wert den Anfangswert zu geben, und dann wird der Wert (der Anfangswert des Wertes) zurückgegeben; Die zweite Delegation ist eine Methode zur Änderung des Wertwerts, die ebenfalls einen Rückgabewert erfordert (den Anfangswert in den Endwert ändern). Func < den > Value, key, oldValue zurückgeben öffentliches TValue AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
2. Der Parameter der zweiten Überlastung ist AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>) Der erste Parameter ist Schlüssel, der zweite ist, wenn der Schlüssel nicht existiert, dieser Wert ist der Anfangswert des Wertes, und der dritte ist delegiert, der die Änderung ausführt (Func< returniert Value, schlüssel, oldValue>). öffentliches TValue AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)
Situation 4: Fügen Sie dem Wörterbuch den Wert des Schlüssels hinzu, aber wenn der Schlüssel bereits existiert, entfernen Sie den Wert; Andernfalls wird es hinzugefügt Erste Überlastung: GetOrAdd(TKEY, Func<TKey, TValue>valueFactory) Der erste Parameter ist key, der zweite Parameter wird delegiert Func<value, key>, wenn der Key nicht existiert, wird eine Variable als Key weitergegeben und der Wert wird geändert. und einen Schlüssel und einen Wert zu erstellen, wodurch ein Wertwert zurückgegeben wird.
2. Zweite Überlastung: GetOrAdd (TKEY, TValue) Der erste Parameter ist Schlüssel, und der Zweck des zweiten Parameters ist es, einen neuen Wert zu erzeugen, der durch den Schlüssel gegeben wird, wenn dieser nicht existiert. Bringt Wert zurück. öffentliches TValue GetOrAdd(TKEY,Func<TKey, TValue>valueFactory) öffentliches TValue GetOrAdd(TKEY,TValue)
Jede Operation von AddOrUpdate und GetOrAdd ist eine Methode, die ConcurrentDictionary zum Ändern und Schreiben des Wörterbuchs hat, was die Sicherheit des Threads gewährleistet (dies geschieht auf locklose Weise, indem Daten im Wörterbuch gelesen werden). |