private async Task ExecuteAsync(CompleteHttpRequestScheduledTask task) { if (task.CancellationTokenSource.IsCancellationRequested) { task.Response = new HttpResponse { IsSuccessful = false }; return; } try { var client = GetSimpleHttpClient(); var serverResponse = await client.SendAsync(task.Request, HttpCompletionOption.ResponseContentRead, new CancellationTokenSource(task.Timeout).Token).ConfigureAwait(false); task.Response = new HttpResponse { StatusCode = GetStatusCode(serverResponse.StatusCode), IsSuccessful = serverResponse.IsSuccessStatusCode, ResponseUri = serverResponse.RequestMessage?.RequestUri, Headers = serverResponse.Headers, ContentHeaders = serverResponse.Content?.Headers, Expires = serverResponse.Content?.Headers.Expires }; if (task.IsBinaryContent) { task.Response.BinaryContent = await GetBinaryContent(serverResponse.Content).ConfigureAwait(false); } else { task.Response.Content = await GetStringContent(serverResponse.Content).ConfigureAwait(false); } } catch (TaskCanceledException ex) { task.Response = new HttpResponse { StatusCode = HttpStatusCode.RequestTimeout, IsSuccessful = false }; } }
private CompleteHttpRequestScheduledTask ScheduleInternal( HttpRequestPriority priority, HttpRequestMessage request, int timeout = 0, bool isBinaryContent = false) { var taskTimeout = timeout != 0 ? timeout : _config.DeadRequestTimeoutInMilliseconds; var task = new CompleteHttpRequestScheduledTask(taskTimeout) { Request = request, Priority = priority, IsBinaryContent = isBinaryContent, }; AddNewTask(priority, task); return(task); }