Возмущение с помощью Reflector показывает, что интервал жестко закодирован. Истечение срока действия обрабатывается внутренним классом CacheExpires
, статический конструктор которого содержит
_tsPerBucket = new TimeSpan(0, 0, 20);
_tsPerBucket
равно readonly
, поэтому не может быть никакого параметра конфигурации, который изменяет его позже.
Таймер, который будет запускать проверку для просроченных элементов, затем устанавливается в CacheExpires.EnableExpirationTimer()
...
DateTime utcNow = DateTime.UtcNow;
TimeSpan span = _tsPerBucket - new TimeSpan(utcNow.Ticks % _tsPerBucket.Ticks);
this._timer = new Timer(new TimerCallback(this.TimerCallback), null,
span.Ticks / 0x2710L, _tsPerBucket.Ticks / 0x2710L);
Расчет span
гарантирует, что таймер срабатывает точно в: 00,: 20,: 40 секунд, хотя я не вижу причин для беспокойства. Метод, который вызывает таймер, - internal
, поэтому я не думаю, что есть какой-либо способ настроить свой собственный таймер, чтобы вызывать его чаще (игнорируя отражение).
Однако, хорошая новость заключается в том, что у вас не должно быть причин беспокоиться об интервале. Cache.Get()
проверяет, что срок действия элемента не истек, и, если он есть, немедленно удаляет элемент из кэша и возвращает null
. Поэтому вы никогда не получите элемент с истекшим сроком действия из кэша, даже если элементы с истекшим сроком действия могут оставаться в кэше до 20 секунд.