Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 58026|Antwort: 2

[Quelle] ConcurrentDictionary unterstützt neue und aktualisierte Updates

[Link kopieren]
Veröffentlicht am 13.07.2016 11:12:05 | | |
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).




Vorhergehend:LINQ multi-bedingte Abfrage, bei der die Bedingung konstruiert wird
Nächster:Windows unter Memcache-basierten Grundoperationsbefehlen
 Vermieter| Veröffentlicht am 13.09.2016 13:33:25 |
ConcurrentDictionary vs. Dictionary+Locking – Dennis Gao
http://www.itsvse.com/thread-3106-1-1.html
(Quelle: Code Agriculture Network)
 Vermieter| Veröffentlicht am 23.03.2021 11:32:18 |
Hinzufügen oder aktualisieren

oder

Dokumentadresse:Der Hyperlink-Login ist sichtbar.
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com