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); } }
public Task <PageFetchResult> Fetch(PageFetchRequest request, CancellationToken ct) { return(Fetch(request, 0, ct)); }