Wie führt man eine thread-sichere Funktionserinnerung in c # durch?
Hier auf Stapelüberlauf habe ichgefunden Der Code, der Funktionen mit nur einem Argument speichert:
static Func<A, R> Memoize<A, R>(this Func<A, R> f)
{
var d = new Dictionary<A, R>();
return a=>
{
R r;
if (!d.TryGetValue(a, out r))
{
r = f(a);
d.Add(a, r);
}
return r;
};
}
Während dieser Code seine Arbeit für mich erledigt, schlägt er manchmal fehl, wenn die gespeicherte Funktion von mehreren Threads gleichzeitig aufgerufen wird:Add
Methode wird zweimal mit demselben Argument aufgerufen und löst eine Ausnahme aus.
Wie kann ich die Speicherung threadsicher machen?