Beispiel #1
0
        protected override Task OnRemoveAsync(CachedItem <T> item)
        {
            var path = toPath(item.Key);

            File.Delete(path);
            return(base.OnRemoveAsync(item));
        }
        internal static string ToJson <T>(this CachedItem <T> item)
        {
            var dto = new CachedItemDTO
            {
                Key     = item.Key,
                Expires = item.Expires.ToString("O"),
                Value   = JsonSerializer.Serialize(item.Value)
            };

            return(JsonSerializer.Serialize(dto));
        }
Beispiel #3
0
        public override async Task AddAsync(string key, T item, bool replace = false, DateTime?expires = null)
        {
            /* obsolete
             * if (_loadingTcs.Task.Status != TaskStatus.RanToCompletion)
             * {
             *  await base.AddAsync(key, item, expires);
             *  return;
             * }
             */
            await ifPreloading();

            validateKey(key);
            var path       = toPath(key);
            var cachedItem = new CachedItem <object>(key, item, expires ?? DateTime.MaxValue);
            var json       = cachedItem.ToJson();

            File.WriteAllText(path, json);
            await base.AddAsync(key, item, replace, expires);
        }
        /// <inheritdoc/>
        public virtual async Task AddAsync(string key, T item, bool replace = false, DateTime?expires = null)
        {
            key ??= DefaultKey;
            if (string.IsNullOrWhiteSpace(key))
            {
                throw new ArgumentNullException(nameof(key));
            }

            try
            {
                if (!replace && await ContainsAsync(key))
                {
                    throw new ArgumentException($"Key already cached: \"{key}\".", nameof(key));
                }

                lock (_syncRoot)
                    _items[key] = new CachedItem <T>(key, item, expires ?? DateTime.MaxValue);
            }
            catch (Exception ex) // nisse
            {
                Console.WriteLine(ex);
                throw;
            }
        }
 /// <summary>
 ///   Called internally to remove an item from the cache.
 ///   Override this method to perform the removal logics of a derived cache.
 /// </summary>
 /// <param name="item">
 ///   The item to be removed.
 /// </param>
 protected virtual async Task OnRemoveAsync(CachedItem <T> item)
 {
 }