MemoryCache UpdateCallback запускается только для просроченных элементов.
Рассмотрим следующий тестовый код:
CacheItem cacheItem1 = new CacheItem("mykey", 1);
CacheItemPolicy policy1 = new CacheItemPolicy();
policy1.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(5);
policy1.UpdateCallback = new CacheEntryUpdateCallback(OnCacheItemUpdate);
MemoryCache.Default.Set(cacheItem1, policy1);
CacheItem cacheItem2 = new CacheItem("mykey", 2);
CacheItemPolicy policy2 = new CacheItemPolicy();
policy2.AbsoluteExpiration = DateTimeOffset.UtcNow.AddSeconds(15);
policy2.UpdateCallback = new CacheEntryUpdateCallback(OnCacheItemUpdate);
MemoryCache.Default.Set(cacheItem2, policy2);
public void OnCacheItemUpdate(CacheEntryUpdateArguments args)
{
// fires only for expired, but not for removed or replaced
}
При запуске этого кода OnCacheItemUpdate будет срабатывать только после истечения срока действия элемента через ~ 15 секунд, но не при его замене с1 -> 2.
Мне кажется, что это ошибка, потому что CacheEntryUpdateArguments.RemovedReason может отличаться от Expired.RemovedCallback работает правильно, как и ожидалось.
Кроме того, время истечения кажется немного задержанным, а не точно 15 секунд.
Это известная ошибка или она каким-то образом задумана?Или я что-то упустил?