Hurgar con Reflector revela que el intervalo está codificado. Caducidad es manejado por una clase interna CacheExpires
, cuyo constructor estático contiene
_tsPerBucket = new TimeSpan(0, 0, 20);
_tsPerBucket
es readonly
, por lo que no puede ser cualquier valor de configuración que modifica más tarde.
El temporizador que activará la comprobación de los elementos caducados se establece entonces en 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);
El cálculo de span
asegura que se activa el temporizador exactamente sobre: 00,: 20: 40 segundos, , aunque no veo ninguna razón para molestarme. El método que el temporizador llama es internal
, por lo que no creo que haya ninguna manera de configurar su propio temporizador para llamarlo más a menudo (ignorando la reflexión).
Sin embargo, la buena noticia es que no deberías tener ningún motivo para preocuparte por el intervalo. Cache.Get()
comprueba que el artículo no ha expirado, y si tiene, entonces elimina el elemento de la memoria caché inmediatamente y devuelve null
. Por lo tanto, nunca obtendrás un elemento caducado de la memoria caché, aunque los elementos caducados pueden permanecer en la memoria caché durante hasta 20 segundos.