public IVirtualFile GetFileIfCached(string virtualPath, System.Collections.Specialized.NameValueCollection queryString, IVirtualFile original) { //Use alternate cache key if provided string key = original is IVirtualFileSourceCacheKey ? ((IVirtualFileSourceCacheKey)original).GetCacheKey(true) : original.VirtualPath; //If cached, serve it. CachedVirtualFile c = cache.Get(key); if (c != null) { return(c); } //If not, let's cache it. if ("mem".Equals(queryString["scache"], StringComparison.OrdinalIgnoreCase)) { locks.TryExecute(key, 3000, delegate() { c = cache.Get(key); if (c == null) { using (Stream data = original.Open()) {//Very long-running call c = new CachedVirtualFile(original.VirtualPath, StreamExtensions.CopyToBytes(data, true)); } cache.Set(key, c);//Save to cache (may trigger cleanup) } }); return(c); } return(null); }
public async Task <IVirtualFileAsync> GetFileIfCachedAsync(string virtualPath, NameValueCollection queryString, IVirtualFileAsync original) { //Use alternate cache key if provided string key = original is IVirtualFileSourceCacheKey ? ((IVirtualFileSourceCacheKey)original).GetCacheKey(true) : original.VirtualPath; //If cached, serve it. CachedVirtualFile c = cache.Get(key); if (c != null) { return(c); } //If not, let's cache it. if ("mem".Equals(queryString["scache"], StringComparison.OrdinalIgnoreCase)) { await asyncLocks.TryExecuteAsync(key, 3000, async delegate() { c = cache.Get(key); if (c == null) { using (Stream data = await original.OpenAsync()) {//Very long-running call c = new CachedVirtualFile(original.VirtualPath, await data.CopyToBytesAsync(true, 0x1000)); } cache.Set(key, c);//Save to cache (may trigger cleanup) } }); return(c); } return(null); }
public IVirtualFile GetFileIfCached(string virtualPath, System.Collections.Specialized.NameValueCollection queryString, IVirtualFile original) { //Use alternate cache key if provided string key = original is IVirtualFileSourceCacheKey ? ((IVirtualFileSourceCacheKey)original).GetCacheKey(true) : original.VirtualPath; //If cached, serve it. CachedVirtualFile c = cache.Get(key); if (c != null) return c; //If not, let's cache it. if ("mem".Equals(queryString["scache"], StringComparison.OrdinalIgnoreCase)) { locks.TryExecute(key, 3000, delegate() { c = cache.Get(key); if (c == null) { using (Stream data = original.Open()) {//Very long-running call c = new CachedVirtualFile(original.VirtualPath, StreamExtensions.CopyToBytes(data, true)); } cache.Set(key, c);//Save to cache (may trigger cleanup) } }); return c; } return null; }