Я пишу следующий код (в LINQPad), чтобы продемонстрировать свою проблему:MemoryCache не уточняет деталь в 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
В результате, как показано ниже:
Может кто-нибудь объяснить, почему Я не могу получить «value2» в качестве результата?
На самом деле я стараюсь дать политику, но она не работает. Но ваш ответ напоминает мне, что я могу проверить исходный код на детали, поэтому в исходном коде политика действительна только в том случае, если 1) нет изменений в мониторинге 2) есть функция обратного вызова для новой политики. Я понятия не имею, почему элемент может обновляться только при обратном вызове, если я дам новую функцию updatecallback, результат будет верным. Так что спасибо все равно. – winterTTr