Я использую IMemoryCache в. NET Core 2.2 приложении с приоритетом «NeverRemove». Этот кеш находится внутри класса, который определен как singleton в файле startup.cs. Я попытался настроить планировщик для запуска каждую ночь, чтобы обновить кэш, и это, кажется, не работает, но это еще одна проблема. Проблема в том, что, по крайней мере, один раз в день, когда я делаю запрос к кешируемому объекту, он недоступен и, следовательно, должен обновлять sh, что занимает около 20 секунд. Я не могу понять, почему кеш не доступен. После обновления кеш доступен нормально и ответ снова очень быстрый. Даже если запланированная задача не запущена и не обновляется кэш, я ожидаю, что кэш нужно будет сгенерировать только один раз, а затем сделать доступным для каждого последующего запроса. Любая помощь?
Установка кеша:
var cacheEntryOptions = new MemoryCacheEntryOptions()
.SetPriority(CacheItemPriority.NeverRemove);
_cache.Set(CacheKeys.Approvers, approvers, cacheEntryOptions);
Получение кеша (тот же класс):
if (!_cache.TryGetValue(CacheKeys.Approvers, out cacheEntry))
Startup.cs
services.AddSingleton<IOracleHelper, OracleHelper>(); // class where cache is handled
services.AddSingleton<IHostedService, ScheduleTask>();
services.AddMemoryCache();