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)); }
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) { }