/// <summary> /// Determines whether [is up to date] [the specified key]. /// </summary> /// <param name="key">The key.</param> /// <param name="synchTicks">The synch ticks.</param> /// <returns></returns> public static ClusteredCachingSynchronizationStatus IsUpToDate(string key, out long synchTicks) { #region check whether we can delay the synchronization check if (ClusteredCacheController.CheckAtRequestIsUpToDateDelayInMilliseconds > 0 && CheckAtRequestDependencies.ContainsKey(key) && CheckAtRequestDependencies[key].LastChecked.HasValue && CheckAtRequestDependencies[key].LastChecked.Value.AddMilliseconds(ClusteredCacheController.CheckAtRequestIsUpToDateDelayInMilliseconds) > DateTime.UtcNow) { synchTicks = CheckAtRequestDependencies[key].Ticks; return(ClusteredCachingSynchronizationStatus.UpToDate); } #endregion DataAccessManager dam = new DataAccessManager(ConnectionString); dam.AddInputParameter("@CacheKey", key); dam.AddInputParameter("@ApplicationId", ClusteredCacheController.ApplicationId); synchTicks = dam.ExecuteScalar <long>(GetFormattedStoredProcedureName(SP_SELECT)); if (synchTicks <= 0) { return(ClusteredCachingSynchronizationStatus.RemovedFromCollection); } else { if (CheckAtRequestDependencies.ContainsKey(key)) { if (CheckAtRequestDependencies[key].Ticks.Equals(synchTicks)) { if (ClusteredCacheController.CheckAtRequestIsUpToDateDelayInMilliseconds > 0) { CheckAtRequestDependencies[key] = GetCheckAtRequestInfo(synchTicks); } return(ClusteredCachingSynchronizationStatus.UpToDate); } else { return(ClusteredCachingSynchronizationStatus.OutOfDate); } } else { return(ClusteredCachingSynchronizationStatus.NotFound); } } }