【发布时间】:2011-04-02 00:06:10
【问题描述】:
我正在制作一个应用程序,它将制作几个 HttpWebRequest 对象并通过 httpRequest.BeginGetResponse 方法下载我的 html。我取回 IAsyncResult 并将其存储在本地,以便我可以随时取消请求,但我不确定我是否正确执行。
这是取消异步 Web 请求的操作:
var res = (RequestState)asyncResult.AsyncState;
res.Request.Abort();
其中 Request 的类型为 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。内部异常表示“服务器主动拒绝连接”或类似的内容。
任何帮助都会很棒!
【问题讨论】:
标签: c# asynchronous httpwebrequest