예제 #1
0
        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;
        }
예제 #2
0
        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;
        }
예제 #3
0
        // 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);
            }
        }