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?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage