ASP.NET 3.5 SP 1 introduce un nuovo overload per il metodo Insert della classe Cache, che serve per la gestire l'omonima funzionalità che si trova nel namespace System.Web.Caching.
Il nuovo metodo Insert funziona in questo modo:
Cache.Insert("key", "value", dependency, expiration, TimeSpan.Zero, MyCacheItemUpdateCallback);
Questo overload consente di inserire un elemento all'interno della cache, associando un callback che è invocato prima che l'elemento venga rimosso dalla stessa, dando la possibilità allo sviluppatore di inserirlo nuovamente.
Questo metodo è pensato per l'inserimento di oggetti in cache la cui generazione risulta molto dispendiosa dal punto di vista delle risorse e durante la rigenerazione dell'oggetto il vecchio valore risulta ancora accessibile, proprio per garantire comunque l'accesso. Inoltre, gli oggetti inseriti in questo modo non sono soggetti alla gestione della rimozione da parte del cache manager, ma vengono rimossi solo allo scadere dell'expire o della dipendenza, quindi il relativo callback non viene invocato in caso di rimozione diretta attraverso i metodi Remove o Insert.
void MyCacheItemUpdateCallback(String key, CacheItemUpdateReason reason, out Object expensiveObject, out CacheDependency dependencies, out DateTime absoluteExpiration, out TimeSpan slidingExpiration) { // impostare a null expensiveObject se non si vuole generare un nuovo elemento expensiveObject = null; }
Il parametro di ritorno expensiveObject va impostato a null se non si vuole generare un nuovo oggetto, altrimenti va impostato sul valore da popolare. E' importante sottolineare che in questo metodo è vivamente sconsigliato modificare l'oggetto in cache utilizzando direttamente le API specifiche, perchè non è stato ancora rimosso e quindi si possono avere collisioni. In caso di eccezioni in questo callback, poichè viene eseguito in un thread separato, l'oggetto viene rimosso dalla cache, poichè ASP.NET non è in grado di popolarlo nuovamente.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.