以下是我对使用HttpWebRequest异步发出请求的理解:
发出异步Web请求的基本结构是调用BeginGetResponse()并同时启动一个计时器。如果响应没有超时,BeginGetResponse()将调用一个调用EndGetResponse()并读取响应的回调方法。如果响应超时,则调用与计时器不同的回调方法,并调用WebRequest.Abort()。
这种结构取决于Abort()和EndGetResponse()是独占的。在EndGetResponse()之后调用Abort()基本上没有效果,并且在Abort()之后调用EndGetResponse()会导致EndGetResponse()抛出异常,然后可以捕获并处理该异常,但是您希望处理超时。
我的问题是当我需要每秒向几个服务发出几百个请求时,一个服务开始变得非常非常潜在。可以在500ms后调用Timeout回调并调用Abort()并且我的程序继续愉快。但由于该服务在10秒后仍未返回,因此BeginGetResponse()启动的第一个线程仍处于等待状态,并且网络连接资源无法供将来的任何请求使用。
有没有办法让超时释放出应该超时的线程资源?如果没有,是否有类似我可以设置的Web.config值的东西会使网络的不同层上的请求超时而不是应用程序?
答案 0 :(得分:0)
free up the resources
- 这对我来说意味着你的线程应该有一个析构函数/终结器,它释放它拥有的非托管资源(What exactly are unmanaged resources?)。