Search code examples
c#caching.net-4.0objectcache

.NET 4 ObjectCache - Can We Hook Into a "Cache Expired" Event?


I've got a simple object being cached like this:

_myCache.Add(someKey, someObj, policy);

Where _myCache is declared as ObjectCache (but injected via DI as MemoryCache.Default), someObj is the object i'm adding, and policy is a CacheItemPolicy.

If i have a CacheItemPolicy like this:

var policy = new CacheItemPolicy 
{ 
   Priority = CacheItemPriority.Default, 
   SlidingExpiration = TimeSpan.FromHours(1)
};

It means it will expire in 1 hour. Cool.

But what will happen is that unlucky first user after the hour will have to wait for the hit.

Is there any way i can hook into an "expired" event/delegate and manually refresh the cache?

I see there is a mention of CacheEntryChangeMonitor but can't find any meaninful doco/examples on how to utilize it in my example.

PS. I know i can use CacheItemPriority.NotRemovable and expire it manually, but i can't do that in my current example because the cached data is a bit too complicated (e.g i would need to "invalidate" in like 10 different places in my code).

Any ideas?


Solution

  • There's a property on the CacheItemPolicy called RemovedCallback which is of type: CacheEntryRemovedCallback. Not sure why they didn't go the standard event route, but that should do what you need.

    http://msdn.microsoft.com/en-us/library/system.runtime.caching.cacheitempolicy.removedcallback.aspx