public IEnumerable <T> GetAll(Func <IEnumerable <T> > cacheMissFunc) { BuildCache(); var data = CacheLock.Read(Lock, () => { var data1 = primaryCache.GetAll(); return(data1.Any() ? data1 : secondaryCaches.GetAll()); }); if (!data.Any()) { data = cacheMissStrategy.Execute(cacheMissFunc); Bust(data); } return(data); }
private List <T> GetCachedItems <TU>(IEnumerable <TU> keys) { var results = new List <T>(); foreach (var key in keys) { if (primaryCache.Contains(key)) { results.Add(CacheLock.Read(Lock, () => primaryCache.GetByKey(key))); } else { results.AddRange(CacheLock.Read(Lock, () => secondaryCaches.Get(key))); } } return(results); }