是否需要关闭NetworkStream和TcpClient,或只关闭TcpClient?

Rya*_*hel 15 c# dispose networkstream tcpclient

我正在阅读有关TcpClient.Close()的文档并注意到这一点:

调用此方法最终将导致关联的Socket关闭,并且还将关闭用于发送和接收数据的关联NetworkStream(如果已创建).

因此,纠正我,如果我错了,但是这说,如果一个调用Close()TcpClient是,NetworkStream也将被关闭.

那么为什么在代码示例的末尾都会Close()被调用?

networkStream.Close();
tcpClient.Close();
Run Code Online (Sandbox Code Playgroud)

只打电话会一样tcpClient.Close();好吗?

Rya*_*hel 11

回答这个问题,因为没有其他人这样做,我可以接受答案.

根据Hans的说法,调用NetworkStream.Close()是不必要的,因为TcpClient.Close()会关闭它的底层NetworkStream.

  • 但是,[关闭文档](http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.close.aspx)声明`调用此方法最终会导致关闭关联的Socket,并且还会关闭用于发送和接收数据的相关NetworkStream(如果有人创建的话).我怀疑GetStream文档已经过时了 - 自从.NET 2.0(当它仍然是一个问题)时,该注释已经存在. (5认同)
  • 这个答案是不正确的.见维维恩的回答.如前所述,[getStream文档](http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.getstream.aspx)指出`当你通过时必须关闭NetworkStream发送和接收数据.关闭TcpClient不会释放NetworkStream (2认同)