public IAsyncResult InvokeBegin(object instance, object[] inputs, AsyncCallback callback, object state) { #if Webhosted Cache cache = GetCache(); #else ObjectCache cache = this.GetCache(); #endif string cacheKey = this.CreateCacheKey(inputs); CachedResult cacheItem = cache[cacheKey] as CachedResult; CachingUserState cachingUserState = new CachingUserState { CacheItem = cacheItem, CacheKey = cacheKey, OriginalUserCallback = callback, OriginalUserState = state }; IAsyncResult originalAsyncResult; if (cacheItem != null) { InvokerDelegate invoker = cacheItem.GetValue; object[] dummy; originalAsyncResult = invoker.BeginInvoke(inputs, out dummy, this.InvokerCallback, cachingUserState); } else { originalAsyncResult = this.originalInvoker.InvokeBegin(instance, inputs, this.InvokerCallback, cachingUserState); } return new CachingAsyncResult(originalAsyncResult, cachingUserState); }
public IAsyncResult InvokeBegin(object instance, object[] inputs, AsyncCallback callback, object state) { string cacheKey = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri.ToString(); CachedResult cacheResult = this.datacache.Get(cacheKey) as CachedResult; CachingUserState cachingUserState = new CachingUserState { CacheItem = cacheResult, CacheKey = cacheKey, OriginalUserCallback = callback, OriginalUserState = state }; IAsyncResult asyncResult; if (cacheResult != null) { InvokerDelegate invoker = cacheResult.GetValue; object[] outputs; asyncResult = invoker.BeginInvoke(inputs, out outputs, this.InvokerCallback, cachingUserState); } else { asyncResult = this.operationInvoker.InvokeBegin(instance, inputs, this.InvokerCallback, cachingUserState); } return new CachingAsyncResult(asyncResult, cachingUserState); }
public object InvokeEnd(object instance, out object[] outputs, IAsyncResult asyncResult) { CachingAsyncResult cachingAsyncResult = asyncResult as CachingAsyncResult; CachingUserState cachingUserState = cachingAsyncResult.CachingUserState; if (cachingUserState.CacheItem == null) { object result = this.originalInvoker.InvokeEnd(instance, out outputs, cachingAsyncResult.OriginalAsyncResult); cachingUserState.CacheItem = new CachedResult { ReturnValue = result, Outputs = outputs }; #if Webhosted this.GetCache().Insert(cachingUserState.CacheKey, cachingUserState.CacheItem, null, Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(this.cacheDuration)); #else this.GetCache().Add(cachingUserState.CacheKey, cachingUserState.CacheItem, DateTimeOffset.UtcNow.Add(TimeSpan.FromSeconds(this.cacheDuration))); #endif return(result); } else { InvokerDelegate invoker = ((System.Runtime.Remoting.Messaging.AsyncResult)cachingAsyncResult.OriginalAsyncResult).AsyncDelegate as InvokerDelegate; invoker.EndInvoke(out outputs, cachingAsyncResult.OriginalAsyncResult); return(cachingUserState.CacheItem.ReturnValue); } }
public IAsyncResult InvokeBegin(object instance, object[] inputs, AsyncCallback callback, object state) { #if Webhosted Cache cache = GetCache(); #else ObjectCache cache = this.GetCache(); #endif string cacheKey = this.CreateCacheKey(inputs); CachedResult cacheItem = cache[cacheKey] as CachedResult; CachingUserState cachingUserState = new CachingUserState { CacheItem = cacheItem, CacheKey = cacheKey, OriginalUserCallback = callback, OriginalUserState = state }; IAsyncResult originalAsyncResult; if (cacheItem != null) { InvokerDelegate invoker = cacheItem.GetValue; object[] dummy; originalAsyncResult = invoker.BeginInvoke(inputs, out dummy, this.InvokerCallback, cachingUserState); } else { originalAsyncResult = this.originalInvoker.InvokeBegin(instance, inputs, this.InvokerCallback, cachingUserState); } return(new CachingAsyncResult(originalAsyncResult, cachingUserState)); }
public CachingAsyncResult(IAsyncResult originalResult, CachingUserState cachingUserState) { this.originalResult = originalResult; this.cachingUserState = cachingUserState; }
public CachingAsyncResult(IAsyncResult asyncResult, CachingUserState cachingUserState) { this.asyncResult = asyncResult; this.cachingUserState = cachingUserState; }
public CachingAsyncResult(IAsyncResult originalResult, CachingUserState cachingUserState) { this.originalResult = originalResult; this.cachingUserState = cachingUserState; }
private void InvokerCallback(IAsyncResult asyncResult) { CachingUserState cachingUserState = asyncResult.AsyncState as CachingUserState; cachingUserState.OriginalUserCallback(new CachingAsyncResult(asyncResult, cachingUserState)); }