C# memoryCache получить доступ к новому значению при вставке в кеш

У меня есть следующий блок кода, который получает sessionId и должен вернуть связанный идентификатор пользователя.

private static async Task<string> AddOrGetExisting(string sessionId, Func<Task<Tuple<string, DateTime>>> factory)
{
      var newValue = new Lazy<Task<Tuple<string, DateTime>>>(factory);
      var oldValue = _cache.AddOrGetExisting(sessionId, newValue, new CacheItemPolicy() { AbsoluteExpiration = (await newValue.Value).Item2 } ) as Lazy<Task<Tuple<string, DateTime>>>;
      try
      {
          return (await (oldValue ?? newValue).Value).Item1;
      }
      catch
      {
          _cache.Remove(sessionId);
          throw;
      }
}

Всякий раз, когда я сохраняю сеанс, я хочу, чтобы кэш сохранял его только до истечения срока его действия.

Кортеж содержит (строку)UserId и (DateTime)ExpirationDate, Проблема с тем, что я написал, заключается в том, что я постоянно вызываю фабрику, которая извлекает данные из базы данных, которая как бы разрушает саму идею кеша.

Как я могу получить доступ к значению только после / если оно было получено?

0 ответов

Другие вопросы по тегам