/// <summary> /// Gets the specified name. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="name">The name.</param> /// <param name="callback">The callback.</param> /// <param name="args">The arguments.</param> /// <returns></returns> public T Get <T>(string name, Func <string, object[], CacheDataInfo <T> > callback = null, params object[] args) { var value = _container.Get(name); if (value.HasValue) { var cInfo = _serialier.Deserialize <CacheDataInfo <T> >(value); if (_container.SupportsExpiration || !HasExpired(cInfo)) { return(cInfo.NewCacheData); } Remove(name); } if (callback == null) { return(default(T)); } using (var cacheLock = _cacheKeyLockAcquisition.AcquireLock(_redisDb, name)) { value = _container.Get(name); if (!value.HasValue) { var cData = callback(name, args); if (cData == null) { return(default(T)); } Set(name, cData.NewCacheData, cData.KeepAlive); return(cData.NewCacheData); } var cInfo = _serialier.Deserialize <CacheDataInfo <T> >(value); return(cInfo.NewCacheData); } }
/// <summary> /// Gets the specified name. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="name">The name.</param> /// <param name="callback">The callback.</param> /// <param name="args">The arguments.</param> /// <returns></returns> public T Get <T>(string name, Func <string, object[], CacheDataInfo <T> > callback = null, params object[] args) { var value = _container.Get(name); if (value.HasValue) { var cInfo = _serialier.Deserialize <CacheDataInfo <T> >(value); if (_container.SupportsExpiration || !HasExpired(cInfo)) { return(cInfo.NewCacheData); } Remove(name); } if (callback == null) { return(default);