繁体   English   中英

HttpWebRequest Async Abort()之后如何释放连接

[英]How to free connection after HttpWebRequest Async Abort()

这是我对使用HttpWebRequest异步发出请求的了解:

发出异步Web请求的基本结构是调用BeginGetResponse()并同时启动计时器。 如果响应没有超时,则BeginGetResponse()将调用一个回调方法,该方法将调用EndGetResponse()并读取响应。 如果响应确实超时,则将调用与计时器不同的回调方法,并调用WebRequest.Abort()。

这种结构取决于Abort()和EndGetResponse()是互斥的事实。 在EndGetResponse()之后调用Abort()基本上无效,而在Abort()之后调用EndGetResponse()导致EndGetResponse()引发一个异常,然后可以捕获并处理该异常,但是您要处理超时。

我的问题是,当我需要每秒对几项服务发出数百个请求而一项服务开始变得非常潜在时。 500毫秒后可能会调用Timeout回调并调用Abort(),我的程序会愉快地继续。 但是,由于该服务在10秒钟后仍未返回,因此由BeginGetResponse()启动的第一个线程仍在等待,并且网络连接资源不可用于以后的任何请求。

有什么办法可以让超时释放据说超时的线程资源? 如果不是,是否可以设置类似Web.config的值,该值会使请求在与应用程序不同的网络层上超时?

free up the resources -对我而言,这意味着您的线程应具有析构器/终结器,该析构器/终结器将释放其拥有的非托管资源( 究竟是什么非托管资源? )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM