Я запутался в свойстве AbsoluteExpiration на CacheItemPolicy.
Документация MSDN для него говорит: "Период времени, который должен пройти до того, как будет выведена запись в кэш". Он использует System.DateTimeOffset для определения "периода времени".
Но если вы посмотрите документацию DateTimeOffset MSDN, в нем говорится, что она представляет собой момент времени... относительно скоординированного универсального времени (УНИВЕРСАЛЬНОЕ ГЛОБАЛЬНОЕ ВРЕМЯ). "Ссылка также на этот qaru.site/info/237814/....
Вы видите проблему? AbsoluteExpiration ожидает "период времени" (например, 5 секунд или 2 часа), но для этого требуется объект, который представляет собой "момент времени" (например, 21 декабря 2012 г., 06:14:00 EST).
В приведенном ниже коде я определяю единую политику для всех элементов. Я хочу, чтобы каждый элемент истекал cacheExpiryInSeconds
секунд после их добавления. Может ли кто-то проверить, что я делаю это правильно?
public class MyCache : IRoutingInfoCache
{
MemoryCache _routingInfoCache;
CacheItemPolicy _cachePolicy;
public MyCache(int cacheExpiryInSeconds)
{
_routingInfoCache = new MemoryCache("myCache");
_cachePolicy = new CacheItemPolicy() {
AbsoluteExpiration =
new DateTimeOffset(
DateTime.UtcNow.AddSeconds(cacheExpiryInSeconds))
};
}
public void Put(string key, object cacheItem)
{
// based on how I constructed _cachePolicy, will this item expire
// in cacheExpiryInSeconds seconds?
_routingInfoCache.Add(new CacheItem(key, cacheItem), _cachePolicy);
}
}