我试图弄清楚这一点:

方法-1:

Dim request = CreateRequest(uri) //some uri
Dim response = DirectCast(request.GetResponse, HttpWebResponse)
response.Close()

方法-2:

Dim request = Createrequest(uri)
Using response = DirectCast(request.GetResponse, HttpWebResponse)
End Using

当我在本地计算机上使用Method-1和Method-2连接并从远程计算机X获得响应时,它们都正常工作。

当我在远程机器Y上使用此代码从X获得响应时,只有Method-1正在工作,而对于Method-2,我正在

System.Net.WebException: The operation has timed out

上述方法与可能出现的问题之间的区别是什么?

有帮助吗?

解决方案

使用只需转换为 Try / Finally 块,它在 .Dispose() >最后块。您可以使用 Reflector 查找生成的代码。您还可以使用它来查看方法的作用。在这种情况下, HttpWebResponse 上的 Dispose()方法 Close()相同,这意味着它实际上存在语义差异。

使用通常具有在对象超出范围时立即释放对象使用的资源的好处。这对于像GDI +或文件句柄这样的东西很有用,但在 HttpWebResponse 的情况下,它可能有点不同。我不太了解那个特定的对象我的猜测是 Close()它并没有真正释放任何资源,因此不需要 Dispose()调用<代码>关闭()。也许这种行为有正当理由。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top