schreibe ich den folgenden Code (in LINQPad) mein Problem zu demonstrieren:Memory nicht aktualisieren Artikel in Updatecallback
void Main()
{
var waitEvent = new AutoResetEvent(false);
MemoryCache.Default.Set(
"test",
"value",
new CacheItemPolicy
{
AbsoluteExpiration = DateTimeOffset.UtcNow.Add(TimeSpan.FromSeconds(5)),
UpdateCallback = (CacheEntryUpdateArguments e) => {
waitEvent.Set();
e.Dump();
e.UpdatedCacheItem = new CacheItem(e.Key, "value2");
}
});
MemoryCache.Default.Get("test").Dump();
waitEvent.WaitOne();
waitEvent.WaitOne(TimeSpan.FromSeconds(10));
MemoryCache.Default.Get("test").Dump();
}
// Define other methods and classes here
Das Ergebnis ist wie folgt:
Kann mir jemand erklären, warum Ich kann "value2" nicht als Ergebnis bekommen?
In der Tat optional ordne ich versuchen, eine Richtlinie zu geben, aber es funktioniert nicht. Aber Ihre Antwort erinnert mich daran, dass ich den Quellcode über das Detail überprüfen kann. Daher ist die Richtlinie im Quellcode nur gültig, wenn 1) keine Änderung am Monitor erfolgt. 2) Es gibt eine Callback-Funktion für neue Richtlinien. Ich habe keine Ahnung, warum das Element nur aktualisiert werden kann, wenn es einen Rückruf gibt, wenn ich eine neue updatecallback-Funktion gebe, wird das Ergebnis korrekt sein. Also trotzdem danke. – winterTTr