public async Task <IHttpWebResponse> PerformAsync() { var rawRequest = await PrepareAsync(); var rawResponse = await GetResponseAsync(rawRequest); if (_config.Advanced.ContentNegotiation && _contentNegotiator.IsApplicable(rawResponse)) { _contentTypeProvider = () => _contentNegotiator.GetSupportedContentType(rawResponse); rawRequest = await PrepareAsync(); rawResponse = await GetResponseAsync(rawRequest); } if (rawResponse.StatusCode == HttpStatusCode.NotModified) { var cached = _config.Advanced.ModifiedSinceCache.Get(rawRequest); rawResponse.SetResponseStream(cached.ResponseStream); } else { await _config.Advanced.ModifiedSinceCache.AddAsync(rawRequest, rawResponse); } ResetModifiers(); return(rawResponse); }