private static void HttpAsyncRequest_TimeoutCallback(object state, bool timedOut) { if (timedOut) { HttpAsyncRequestState requestState = state as HttpAsyncRequestState; if (requestState != null) { requestState.Request.Abort(); } } }
private static void HttpAsyncRequest_RespCallback(IAsyncResult asyncResult) { WebResponse resp = null; HttpAsyncRequestState requestState = null; try { string result = null; requestState = asyncResult.AsyncState as HttpAsyncRequestState; resp = requestState.Request.EndGetResponse(asyncResult); using (StreamReader sr = new StreamReader(resp.GetResponseStream(), requestState.RespEncoding)) { result = sr.ReadToEnd(); sr.Close(); } if (requestState.RespResult != null) { requestState.RespResult(result, resp, null); } } catch (Exception ex) { if (requestState != null && requestState.RespResult != null) { requestState.RespResult(null, resp, ex); } } finally { if (resp != null) { resp.Close(); resp = null; } } }
public static void HttpAsyncRequest(HttpWebRequest request, Encoding responseEncoding, int timeoutInSecond, ResponseResult responseResult) { HttpAsyncRequestState requestState = new HttpAsyncRequestState() { Request = request, RespResult = responseResult, RespEncoding = responseEncoding, }; try { // Start the asynchronous request. IAsyncResult asyncResult = request.BeginGetResponse(HttpAsyncRequest_RespCallback, requestState); ThreadPool.RegisterWaitForSingleObject(asyncResult.AsyncWaitHandle, new WaitOrTimerCallback(HttpAsyncRequest_TimeoutCallback), requestState, timeoutInSecond * 1000, true); } catch (WebException ex) { if (requestState.RespResult != null) { requestState.RespResult(null, ex.Response as HttpWebResponse, ex); } } }