public Task <T> GetAsync <T>(string uri) { T cachedResponse; if (_cache.TryGetResponse(uri, out cachedResponse)) { return(Task.FromResult(cachedResponse)); } return(Task.Run(async() => { var httpResult = await this.GetAsync(uri); if (!httpResult.IsSuccessStatusCode) { throw new HttpRequestException($"Http Failure: Status {httpResult.StatusCode}"); } var response = JsonConvert.DeserializeObject <T>(await httpResult.Content.ReadAsStringAsync()); _cache.CacheResponse(uri, response); return response; })); }