Gibt es eine Möglichkeit, ConcurrentDictionary.TryUpdate mit einem Lambda-Ausdruck zu verwenden?

8

Ich habe ein einfaches Szenario, in dem ich den Wert eines vorhandenen Elements aktualisieren möchte. Nur die AddOrUpdate -Methode bietet einen Delegaten, bei dem ich den alten Wert aktualisieren kann. Ich möchte jedoch nichts hinzufügen, wenn der Schlüssel nicht existiert. Auch TryUpdate Methode hat keine Überladungen, dass ich den alten Wert erhalten kann. Gibt es eine Möglichkeit, dies mit der aktuellen API zu tun?

Hier ist die Signatur, nach der ich suche:

%Vor%     
Ufuk Hacıoğulları 02.09.2012, 22:21
quelle

1 Antwort

13

Sie müssen bereit sein, eine Schleife zu erstellen und vielleicht Func mehr als einmal aufzurufen (das gleiche wie bei der Überladung von GetOrAdd , die einen verwendet). Dies bedeutet, dass, wenn Func Nebenwirkungen hat, es von außen nicht als atomar erscheint. Wirklich, Func s sollte keine Nebenwirkungen haben, aber sie haben immer einige Kosten, so dass die Möglichkeit wiederholter Aufrufe nicht ignoriert werden kann:

%Vor%

Wie gesagt, weil es eine Schleife bilden kann, ist es nur atomar, wie es von außen beobachtet wird, wenn in Func keine Nebenwirkungen auftreten.

(Bearbeiten: Löschen einer möglichen Abkürzung, die wirklich zu anstrengend ist, um allgemein verwendet zu werden und wahrscheinlich jemanden zu beißen, der es versucht hat).

    
Jon Hanna 02.09.2012, 23:43
quelle

Tags und Links