private async Task RemoveEntry(string key, bool inMemory = false) { ICacheEntry entry = null; _lock.EnterReadLock(); try { if (!_entries.ContainsKey(key)) { return; } entry = _entries[key]; } finally { _lock.ExitReadLock(); } if (entry == null) { return; } if (inMemory) { _lock.EnterWriteLock(); try { entry.RemoveValue(); } finally { _lock.ExitWriteLock(); } InMemoryCount--; InMemorySize -= entry.Size; } else { if (entry.IsInMemory) { InMemoryCount--; InMemorySize -= entry.Size; } Count--; Size -= entry.Size; await _storage.Remove(entry.FileName); _lock.EnterWriteLock(); try { _entries.Remove(key); } finally { _lock.ExitWriteLock(); } } }