System.Web.Caching.Cache.ExpireItems C# (CSharp) Method

ExpireItems() private method

private ExpireItems ( object data ) : void
data object
return void
		void ExpireItems (object data)
		{
			DateTime now = DateTime.Now;
			CacheItem item = null;

			expirationTimer.Change (Timeout.Infinite, Timeout.Infinite);
			try {
				cacheLock.EnterWriteLock ();
				while (true) {
					item = timedItems.Peek ();
					
					if (item == null) {
						if (timedItems.Count == 0)
							break;
						
						timedItems.Dequeue ();
						continue;
					}
						
					if (!item.Disabled && item.ExpiresAt > now.Ticks)
						break;
					
					if (item.Disabled) {
						item = timedItems.Dequeue ();
						continue;
					}

					item = timedItems.Dequeue ();
					if (item != null)
						if (!NeedsUpdate (item, CacheItemUpdateReason.Expired, false))
							Remove (item.Key, CacheItemRemovedReason.Expired, false, true);
				}
			} finally {
				// See comment at the top of the file, above cacheLock declaration
				cacheLock.ExitWriteLock ();
			}

			if (item != null) {
				long remaining = Math.Max (0, (long)(item.AbsoluteExpiration - now).TotalMilliseconds);
				if (remaining > 0 && expirationTimerPeriod > remaining)
					expirationTimerPeriod = remaining;
				
				expirationTimer.Change (expirationTimerPeriod, expirationTimerPeriod);
				return;
			}

			expirationTimer.Change (Timeout.Infinite, Timeout.Infinite);
			expirationTimerPeriod = 0;
		}