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);
        }