我正在製作一個應用程序,它將生成幾個HttpWebRequest對象並通過httpRequest.BeginGetResponse
方法下載我的html。我找回IAsyncResult
並將它存儲在本地,以便我可以隨時取消請求,但我不確定是否正確執行此操作。取消異步httpwebrequests
下面是我在做什麼,以取消異步Web請求:
var res = (RequestState)asyncResult.AsyncState;
res.Request.Abort();
哪裏請求HttpWebRequest
類型。
我注意到的是,即使在我調用這些代碼行之後,仍然會在應用程序中打開所有異步線程。如果我在httpRequest.BeginGetResponse(GetResponseCallback, state)
(例如方法GetResponseCallback
)中調用的代理中設置了一箇中斷點,那麼調試程序在幾秒鐘後會在方法內部中斷,導致在運行該方法時拋出WebException。
只是爲了保持完整性,我GetResponseCallback看起來是這樣的:
using (var httpWebResponse = (HttpWebResponse)request.EndGetResponse(result))
using (Stream dataStream = httpWebResponse.GetResponseStream())
using (var reader = new StreamReader(dataStream))
{
string ret = reader.ReadToEnd();
state.OnComplete(ret, new EventArgs());
}
和我上using (Stream dataStream = httpWebResponse.GetResponseStream())
行引發WebException。內部異常說「服務器主動拒絕連接」或類似的東西。
任何幫助將是優秀的!