代码之家  ›  专栏  ›  技术社区  ›  Mahesh Velaga

httpResponse是否在没有显式响应的“using”块中工作。close())

  •  0
  • Mahesh Velaga  · 技术社区  · 16 年前

    我想澄清一下:

    方法1:

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

    方法二:

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

    当我在本地机器上同时使用方法1和方法2来连接并从远程机器X获得响应时,这两个方法都正常工作。

    当我在远程机器Y上使用此代码从X获得响应时,只有方法1有效,而对于方法2,我得到

    System.Net.WebException: The operation has timed out
    

    上面提到的方法有什么区别,可能有什么问题?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Joey Gumbo    16 年前

    Using 简单地翻译成 Try / Finally 阻止哪些呼叫 .Dispose() 终于 块。你可以使用 Reflector 查找生成的代码。您还可以使用它来查看方法的功能。在这种情况下, Dispose() 方法对 HttpWebResponse 做同样的事 Close() 这意味着它实际上在语义上有差异。

    使用 通常有一个好处,当对象超出范围时,可以立即释放它所使用的资源。这对于gdi+或文件句柄之类的东西很有用,但是在 HTTPWebRead 可能有点不同。对那个特定的物体不太了解,我想是 关闭() 它并不真正释放任何资源,因此不需要 处置() 电话 关闭() 也是。也许这是有正当理由的。