Вы должны иметь возможность использовать делегат CacheItemUpdateCallback
, который является 6-м параметром, который является 4-й перегрузкой для Insert
при использовании ASP.NET Cache:
Cache.Insert(key, value, dependancy, absoluteExpiration,
slidingExpiration, onUpdateCallback);
Должно работать следующее:
Cache.Insert(key, item, null, DateTime.Now.AddSeconds(300),
Cache.NoSlidingExpiration, itemUpdateCallback);
private void itemUpdateCallback(string key, CacheItemUpdateReason reason,
out object value, out CacheDependency dependency, out DateTime expiriation,
out TimeSpan slidingExpiration)
{
// do your SQL call here and store it in 'value'
expiriation = DateTime.Now.AddSeconds(300);
value = FunctionToGetYourData();
}
С MSDN :
Когда срок действия объекта в кеше истекает,
ASP.NET вызывает
Метод CacheItemUpdateCallback с
ключ для элемента кэша и
причина, по которой вы можете обновить
вещь. Остальные параметры этого
метод вне параметров. Вы поставляете
новый кэшированный элемент и необязательно
значения срока действия и зависимости до
использовать при обновлении кэшированного элемента.
Обратный вызов обновления не вызывается, если
кэшированный элемент явно удален
используя вызов Remove ().
Если вы хотите, чтобы кэшированный элемент был
удалить из кеша надо
вернуть null в дорогой объект
параметр. В противном случае вы возвращаете
ссылка на новые кэшированные данные
используя параметр дорогой объект.
Если вы не указываете срок действия или
значения зависимости, элемент будет
удаляется из кеша только при
нужна память.
Если метод обратного вызова выдает
исключение ASP.NET подавляет
исключение и удаляет кэшированные
значение.
Я не проверял это, поэтому вам, возможно, придется немного повозиться с ним, но это должно дать вам базовое представление о том, чего вы пытаетесь достичь.