コード例 #1
0
        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(); }
            }
        }