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% 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:
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).
Tags und Links .net c# concurrency