protected virtual string ExecuteWithCache(IClientCache cache, string url, string key, Func<IClientCache, string, string> cacheScheme) { var fetch = cache.Get<string>(CreateCacheKey(key, url)); if (fetch != null) { return fetch; } var result = cacheScheme.Invoke(cache, url); return result; }
protected virtual string ExecuteWithCacheAndSlidingExpiration(IClientCache cache, string url, string key, TimeSpan expiry, Func<IClientCache, string, TimeSpan, string> cacheScheme) { var fetch = cache.Get<string>(CreateCacheKey(key, url)); if (fetch != null) { return fetch; } var result = cacheScheme.Invoke(cache, url, expiry); return result; }
// expects real cache key, not prefix private void ExecuteGetAsyncAndCacheWithExpiry(IClientCache cache, string key, string url, TimeSpan slidingExpiration, IWebQueryClient client) { var fetch = cache.Get<string>(key); if (fetch != null) { var args = new WebQueryResponseEventArgs(fetch); OnQueryResponse(args); } else { var state = new Pair<IClientCache, Pair<string, TimeSpan>> { First = cache, Second = new Pair<string, TimeSpan> {First = key, Second = slidingExpiration} }; var args = new WebQueryRequestEventArgs(url); OnQueryRequest(args); client.OpenReadCompleted += client_OpenReadCompleted; client.OpenReadAsync(new Uri(url), state); } }