Beispiel #1
0
        public async Task <PageFetchResult> Fetch(PageFetchRequest request, int delay, CancellationToken ct)
        {
            var result = new PageFetchResult(request);
            HttpResponseMessage responseMessage = null;

            try
            {
                if (delay > 0)
                {
                    try
                    {
                        await Task.Delay(delay, ct);
                    }
                    catch (TaskCanceledException)//CancellationTokenSource is canceled.
                    {
                        ct.ThrowIfCancellationRequested();
                    }
                }
                responseMessage = await _httpClient.GetAsync(request.Url, ct);

                responseMessage.EnsureSuccessStatusCode();
                using (var content = responseMessage.Content)
                {
                    result.Content = await content.ReadAsStringAsync();
                }
                return(result);
            }
            catch (TaskCanceledException)
            {//http timeout or user canceled.
                //if (ct.IsCancellationRequested)
                ct.ThrowIfCancellationRequested();
                result.Error = new PageFetchResult.ErrorInfo
                {
                    IsTimeout = true
                };
                return(result);
            }
            catch (HttpRequestException)
            {
                result.Error = new PageFetchResult.ErrorInfo();
                if (responseMessage == null)
                {
                    result.Error.IsConnectionError = true;

                    /*
                     * if (hre.InnerException != null && hre.InnerException is WebException)
                     * {
                     *  var status = ((WebException) (hre.InnerException)).Status;
                     * }
                     * // * */
                }
                else
                {
                    result.Error.StatusCode = responseMessage.StatusCode;
                }
                return(result);
            }
        }
Beispiel #2
0
 public Task <PageFetchResult> Fetch(PageFetchRequest request, CancellationToken ct)
 {
     return(Fetch(request, 0, ct));
 }