/// <summary> /// /// </summary> /// <param name="key"></param> /// <param name="waitTime"></param> /// <returns></returns> public static async Task <T> GetOrWaitCache <T>(object key, int waitTime = 30) { if (AppCache.ContainsKey(key)) { object objCache = AppCache.GetCache <T>(key); if (objCache != null) { return((T)objCache); } else { DateTime dtNow = DateTime.Now; while ((DateTime.Now - dtNow).TotalSeconds < waitTime) { await Task.Delay(50); objCache = AppCache.GetCache <T>(key); if (objCache != null) { return((T)objCache); } } return(default(T)); } } else { AppCache.Add(key, null); return(default(T)); } }
public static T GetCache <T>(object key) { var nkey = key.Equals(Thread.CurrentThread.ManagedThreadId) ? key : $"{key}_{DAO.DBNo}"; dicCache.TryGetValue(nkey, out CacheObject obj); if (obj == null) { return(default(T)); } if ((DateTime.Now - obj.CacheStartTime).TotalMinutes > obj.ExpireTime) { AppCache.Remove(nkey); return(default(T)); } return((T)obj.Value); }
private static void CacheExpireMoni() { try { var v = dicCache.Values.OrderBy((itm) => { return(itm.ExpireTime); }).Take(20); DateTime dtNow = DateTime.Now; foreach (var c in v) { if ((dtNow - c.CacheStartTime).TotalMinutes > c.ExpireTime) { AppCache.Remove(c.Key); } } } catch { } }
public static bool ContainsKey(object key) { var nkey = key.Equals(Thread.CurrentThread.ManagedThreadId) ? key : $"{key}_{DAO.DBNo}"; if (dicCache.ContainsKey(nkey)) { CacheObject cobj; if (dicCache.TryGetValue(nkey, out cobj)) { if ((DateTime.Now - cobj.CacheStartTime).TotalMinutes > cobj.ExpireTime) { AppCache.Remove(nkey); return(false); } } } return(dicCache.ContainsKey(nkey)); }