我设置了HttpWebRequest的Timeout和ReadWriteTimeout,并且在尝试连接到不存在的服务器时仍然GetRequestStream没有超时。在解决DNS解析时,我遇到了类似的问题,但这次有问题的服务器在我自己的机器上运行(localhost),所以这不相关。
情景如下:
此时线程挂起。我尝试将KeepAlive设置为false,但这没有帮助。
我想过在一个单独的线程中运行上面的场景,如果它花了太长时间自己杀掉它 - 但是这个解决方案非常难看并且不会阻止资源泄漏。
答案 0 :(得分:5)
尝试使用BeginGetRequestStream和EndGetRequestStream而不是GetRequestStream。设置一个计时器并在经过足够的时间后过早地调用EndGetRequestStream,假设请求将挂起。显然,如果你正常处理请求,你还必须在传递给BeginGetRequestStream的委托中调用EndGetRequestStream,这样两个线程之间必须有一些同步才能防止调用EndGetRequestStream两次。