0

以下是我对使用 HttpWebRequest 异步发出请求的理解:

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

这种结构取决于 Abort() 和 EndGetResponse() 是互斥的。在 EndGetResponse() 之后调用 Abort() 基本上没有效果,在 Abort() 之后调用 EndGetResponse() 会导致 EndGetResponse() 抛出异常,然后可以捕获并处理该异常,但是您想要处理超时。

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

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

4

1 回答 1

0

free up the resources- 这对我来说意味着你的线程应该有一个析构函数/终结器,它释放它拥有的非托管资源(究竟什么是非托管资源?)。

于 2012-07-06T23:27:53.217 回答