我试图弄清楚这一点:
方法-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
上述方法与可能出现的问题之间的区别是什么?
答案 0 :(得分:1)
Using
只是转换为Try
/ Finally
块,在.Dispose()
块中调用Finally
。您可以使用Reflector查找生成的代码。您还可以使用它来查看方法的作用。在这种情况下,Dispose()
上的HttpWebResponse
方法不与Close()
执行相同的操作,这意味着它实际上存在语义差异。
Using
通常具有在对象超出范围时立即释放对象使用的资源的好处。这对于像GDI +或文件句柄这样的东西很有用,但在HttpWebResponse
的情况下它可能有点不同。我对这个特定对象了解不够,Close()
它并没有真正释放任何资源,所以也不需要Dispose()
次调用Close()
。也许这种行为有正当理由。