Müssen wir bei der Arbeit mit System.Runtime.Caching.MemoryCache
z. Aufruf von Contains(key);
oder ist es bereits threadsicher?
Der Abschnitt "Threadsicherheit" in dem MSDN Library-Artikel zu einer Klasse dokumentiert dies:
Für alle Instanzmitglieder ist nicht garantiert, dass sie threadsicher sind.
Dies ist normal für .NET-Klassen, die Dokumentation ist vorbildlich und in einigen wenigen Fällen nicht aussagekräftig. Das war auch bei MemoryCache der Fall, bis die Dokumentation aktualisiert wurde. Der von Davide verlinkte Connect-Feedback-Artikel ist hilfreich, um dies zu klären:
System.Runtime.Caching.MemoryCache ist threadsafe. Mehrere gleichzeitig Threads können eine MemoryCache-Instanz lesen und schreiben. Im Inneren Thread-Sicherheit wird automatisch behandelt, um sicherzustellen, dass der Cache aktualisiert wird in einer einheitlichen Art und Weise.
Worauf es sich möglicherweise bezieht, sind die Daten, die im Cache gespeichert sind kann selbst nicht threadsicher sein. Zum Beispiel, wenn eine Liste eingefügt wird Der Cache und zwei separate Threads erhalten beide einen Verweis auf den Cache Liste, die zwei Threads werden aufeinander treffen, wenn sie beide versuchen, die Liste gleichzeitig zu aktualisieren.