Мой вопрос похож на этот, но ответы только объясняют, почему вещи случаются так, как они, не как на самом деле достичь желаемого решения.
Код: Выделить всё
var options = new MemoryCacheEntryOptions()
{
// After x minutes of non-access, remove
SlidingExpiration = TimeSpan.FromMinutes(x),
}
.RegisterPostEvictionCallback(OnCacheItemRemoved);
CacheItem будет удален только при доступе к на Timepoint T1 > t0 + x '. Это означает, что если я больше не получаю доступ к элементу после этой точки, он также никогда не будет удален из кэша. Если бы я хотел, чтобы он остался в памяти, если к нему все еще доступ, это будет выселено из -за истечения срока действия. Я хочу простое скользящее окно с автоматическим выселением, как только элемент не был доступен в X минутах. Я ожидаю, что внутренний таймер справится с этим. Не нужно работать каждую секунду по соображениям исполнения, для меня достаточно хорошо.
Код: Выделить всё
services.AddMemoryCache(options => {
// Check for expired cache items once a minute
options.ExpirationScanFrequency = TimeSpan.FromMinutes(1);
});
< /code>
Но это, похоже, не работает. Мой обратный вызов по -прежнему не вызывается через несколько минут, хотя ничто не обращается к нему. X установлен на 1
на данный момент.
Подробнее здесь:
https://stackoverflow.com/questions/788 ... -accessing