<PackageReference Include="Polly" Version="5.6.1" />

RelativeTtl

public class RelativeTtl : NonSlidingTtl
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); } } }