private static void ScanForExpiredEntries(MemoryCache cache) { DateTime utcNow = DateTime.UtcNow; foreach (var cachePair in cache._cacheEntries) { object key = cachePair.Key; CacheEntry cacheEntry = cachePair.Value; if (cacheEntry.CheckIfExpired(utcNow)) { if (cache._cacheEntries.Remove(key, cacheEntry)) { cache.RemoveFromAllTagEntries(cacheEntry); } } } foreach (var tagPair in cache._tagEntries) { object tag = tagPair.Key; TagEntry tagEntry = tagPair.Value; if (tagEntry.IsEmpty) { if (cache._tagEntries.Remove(tag, tagEntry)) { tagEntry.MarkAsRemoved(); cache.RemoveLinkedCacheEntries(tagEntry); } } } Volatile.Write(ref cache._cleanupIsRunning, 0); }