.NET 4 ObjectCache: possiamo accedere a un evento “Cache scaduta”?

Ho un object semplice che viene memorizzato nella cache in questo modo:

_myCache.Add(someKey, someObj, policy); 

Dove _myCache è dichiarato come ObjectCache (ma iniettato via DI come someObj ), someObj è l’object che sto aggiungendo, e policy è un CacheItemPolicy .

Se ho un CacheItemPolicy come questo:

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

Significa che scadrà tra 1 ora. Freddo.

Ma quello che succederà è che il primo utente sfortunato dopo l’ora dovrà aspettare il colpo.

C’è un modo in cui posso aghook in un evento / delegato “scaduto” e aggiornare manualmente la cache?

Vedo che c’è una menzione di CacheEntryChangeMonitor ma non riesco a trovare nessun documento / esempio significativo su come utilizzarlo nel mio esempio.

PS. So che posso usare CacheItemPriority.NotRemovable e scadere manualmente, ma non posso farlo nel mio esempio corrente perché i dati memorizzati nella cache sono un po ‘troppo complicati (ad esempio avrei bisogno di “invalidare” in 10 posti diversi nel mio codice ).

Qualche idea?

C’è una proprietà su RemovedCallback chiamata RemovedCallback che è di tipo: CacheEntryRemovedCallback . Non sono sicuro del motivo per cui non hanno seguito il percorso degli eventi standard, ma dovrebbe fare quello che ti serve.

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

In ritardo con questo partito, ma ho appena notato una differenza interessante tra callback CacheItemUpdate e CacheItemRemove.

http://msdn.microsoft.com/en-us/library/system.web.caching.cacheitemupdatereason.aspx

In particolare questo commento:

A differenza dell’enumerazione CacheItemRemovedReason, questa enumerazione non include i valori Removed o Underused. Gli elementi della cache aggiornabili non sono rimovibili e pertanto non possono essere rimossi automaticamente da ASP.NET anche se è necessario liberare memoria.