コード例 #1
0
        private bool ShouldDelete(CachedItem data)
        {
            var currentTime = DateTimeOffset.UtcNow;

            if (data.AbsolutExperiation != null && data.AbsolutExperiation.Value <= currentTime)
            {
                return(true);
            }
            if (data.SlidingExperiation.HasValue && data.LastAccessTime.HasValue && data.LastAccessTime.Value.Add(data.SlidingExperiation.Value) < currentTime)
            {
                return(true);
            }

            return(false);
        }
コード例 #2
0
        public Task SetAsync(string key, byte[] value, DistributedCacheEntryOptions options, CancellationToken token = default(CancellationToken))
        {
            DateTimeOffset?absoluteExpiration = null;
            var            currentTime        = DateTimeOffset.UtcNow;

            if (options.AbsoluteExpirationRelativeToNow.HasValue)
            {
                absoluteExpiration = currentTime.Add(options.AbsoluteExpirationRelativeToNow.Value);
            }
            else if (options.AbsoluteExpiration.HasValue)
            {
                if (options.AbsoluteExpiration.Value <= currentTime)
                {
                    throw new ArgumentOutOfRangeException(
                              nameof(options.AbsoluteExpiration),
                              options.AbsoluteExpiration.Value,
                              "The absolute expiration value must be in the future.");
                }
                absoluteExpiration = options.AbsoluteExpiration;
            }
            var item = new CachedItem(partitionKey, key, value)
            {
                LastAccessTime = currentTime
            };

            if (absoluteExpiration.HasValue)
            {
                item.AbsolutExperiation = absoluteExpiration;
            }
            if (options.SlidingExpiration.HasValue)
            {
                item.SlidingExperiation = options.SlidingExpiration;
            }
            var op = TableOperation.InsertOrReplace(item);

            return(this.azuretable.ExecuteAsync(op));
        }