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); }