RelativeTtl
Defines a ttl strategy which will cache items until the specified point-in-time.
using Polly.Utilities;
using System;
namespace Polly.Caching
{
public class RelativeTtl : NonSlidingTtl
{
private static readonly TimeSpan DateTimeOffSetMaxTimeSpan = DateTimeOffset.MaxValue.Subtract(DateTimeOffset.MinValue);
public RelativeTtl(TimeSpan ttl)
{
if (ttl < TimeSpan.Zero)
throw new ArgumentOutOfRangeException("ttl", "The ttl for items to cache must be greater than zero.");
DateTimeOffset absoluteExpirationTime;
if (!(ttl == TimeSpan.MaxValue)) {
if (!(ttl >= DateTimeOffSetMaxTimeSpan)) {
DateTimeOffset left = SystemClock.DateTimeOffsetUtcNow();
DateTimeOffset dateTimeOffset = DateTimeOffset.MaxValue;
if (!(left > dateTimeOffset.Subtract(ttl))) {
dateTimeOffset = SystemClock.DateTimeOffsetUtcNow();
absoluteExpirationTime = dateTimeOffset.Add(ttl);
} else
absoluteExpirationTime = DateTimeOffset.MaxValue;
} else
absoluteExpirationTime = DateTimeOffset.MaxValue;
} else
absoluteExpirationTime = DateTimeOffset.MaxValue;
base..ctor(absoluteExpirationTime);
}
}
}