public async Task <T> ProcessStreamAsync <T>( HttpSourceRequest request, Func <Stream, Task <T> > processAsync, SourceCacheContext cacheContext, ILogger log, CancellationToken token) { return(await ProcessResponseAsync( request, async response => { if ((request.IgnoreNotFounds && response.StatusCode == HttpStatusCode.NotFound) || response.StatusCode == HttpStatusCode.NoContent) { return await processAsync(null); } response.EnsureSuccessStatusCode(); var networkStream = await response.Content.ReadAsStreamAsync(); return await processAsync(networkStream); }, cacheContext, log, token)); }
public async Task <T> ProcessResponseAsync <T>( HttpSourceRequest request, Func <HttpResponseMessage, Task <T> > processAsync, SourceCacheContext cacheContext, ILogger log, CancellationToken token) { // Generate a new session id if no cache context was provided. var sessionId = cacheContext?.SessionId ?? Guid.NewGuid(); Task <ThrottledResponse> throttledResponseFactory() => GetThrottledResponse( request.RequestFactory, request.RequestTimeout, request.DownloadTimeout, request.MaxTries, request.IsRetry, request.IsLastAttempt, sessionId, log, token); using (var throttledResponse = await throttledResponseFactory()) { return(await processAsync(throttledResponse.Response)); } }
public Task <T> ProcessResponseAsync <T>( HttpSourceRequest request, Func <HttpResponseMessage, Task <T> > processAsync, ILogger log, CancellationToken token) { return(ProcessResponseAsync(request, processAsync, cacheContext: null, log: log, token: token)); }
public Task <T> ProcessStreamAsync <T>( HttpSourceRequest request, Func <Stream, Task <T> > processAsync, ILogger log, CancellationToken token) { return(ProcessStreamAsync <T>(request, processAsync, cacheContext: null, log: log, token: token)); }
public async Task <JObject> GetJObjectAsync(HttpSourceRequest request, ILogger log, CancellationToken token) { return(await ProcessStreamAsync( request, processAsync : stream => { if (stream == null) { return Task.FromResult <JObject>(null); } return stream.AsJObjectAsync(); }, log : log, token : token)); }
public async Task <T> ProcessResponseAsync <T>( HttpSourceRequest request, Func <HttpResponseMessage, Task <T> > processAsync, ILogger log, CancellationToken token) { Func <Task <ThrottledResponse> > throttledResponseFactory = () => GetThrottledResponse( request.RequestFactory, request.RequestTimeout, request.DownloadTimeout, log, token); using (var throttledResponse = await throttledResponseFactory()) { return(await processAsync(throttledResponse.Response)); } }
public async Task <JObject> GetJObjectAsync(HttpSourceRequest request, ILogger log, CancellationToken token) { return(await ProcessStreamAsync( request, processAsync : stream => { if (stream == null) { return Task.FromResult((JObject)null); } using (var reader = new StreamReader(stream)) using (var jsonReader = new JsonTextReader(reader)) { return Task.FromResult(JObject.Load(jsonReader)); } }, log : log, token : token)); }
internal async Task <T> ProcessHttpStreamAsync <T>( HttpSourceRequest request, Func <HttpResponseMessage, Task <T> > processAsync, ILogger log, CancellationToken token) { return(await ProcessResponseAsync( request, async response => { if ((request.IgnoreNotFounds && response.StatusCode == HttpStatusCode.NotFound) || response.StatusCode == HttpStatusCode.NoContent) { return await processAsync(null); } response.EnsureSuccessStatusCode(); return await processAsync(response); }, cacheContext : null, log, token)); }