private static void ProcessResponse(IAsyncResult asyncResult, WebRequest request, HttpResponse resp, Action<HttpResponse> action) { lock (pendingRequests) { if (pendingRequests.Contains(resp)) pendingRequests.Remove(resp); } try { var response = request.EndGetResponse(asyncResult); resp.IsConnected = true; LoadResponse(resp, response); } catch (Exception exception) { if (exception is WebException) { var response = ((WebException)exception).Response as HttpWebResponse; if (response != null) { resp.HttpStatusCode = response.StatusCode; try { LoadResponse(resp, response); } catch { } exception = new HttpStatusException(exception.Message) { Result = resp, WebException = (WebException) exception }; } } if (resp.ResponseStream != null) { using (resp.ResponseStream) resp.RawResponse = resp.ResponseStream.ReadToEnd(); } resp.Exception = exception; if (action != null) action(resp); return; } if (action != null) action(resp); }