3

我有一个应用程序正在连接到某个网络服务器 (tcp) 并使用网络流进行连接:

if (!SSL)
{
     _networkStream = new System.Net.Sockets.TcpClient(Server, Port).GetStream();
     _StreamWriter = new System.IO.StreamWriter(_networkStream);
     _StreamReader = new System.IO.StreamReader(_networkStream, Encoding.UTF8);
}

if (SSL)
{
     System.Net.Sockets.TcpClient client = new System.Net.Sockets.TcpClient(Server, Port);
     _networkSsl = new System.Net.Security.SslStream(client.GetStream(), false,
                    new System.Net.Security.RemoteCertificateValidationCallback(Protocol.ValidateServerCertificate), null);
     _networkSsl.AuthenticateAsClient(Server);
     _StreamWriter = new System.IO.StreamWriter(_networkSsl);
     _StreamReader = new System.IO.StreamReader(_networkSsl, Encoding.UTF8);
}

///// since now I working with both reader and writer globally in multiple threads

我正在异步使用读取器和写入器(在 2 个线程中),并且我需要使这两个流都全局可用(它们被定义为类级别的公共引用),所以我不知道是否using可以在这里使用语句。

我应该如何正确关闭此连接?所有对象(NetworkStream、流写入器和读取器)都有 Close() 方法。我应该为他们所有人打电话吗?还是只有其中之一?有没有必要释放一些资源?

4

2 回答 2

2

把它们放在一个using块中。操作完成后,它将适当地关闭并处理每个流。

using (StreamReader reader = new StreamReader(_networkStream, Encoding.UTF8)) 
{

}
于 2013-05-14T08:35:38.987 回答
0

使用 using() {} 块。这样,所有连接/流在使用后都会正确关闭。

using(_networkStream = new System.Net.Sockets.TcpClient(Server, Port).GetStream())
{
    using(_StreamWriter = new System.IO.StreamWriter(_networkStream))
    {
      //do stuff
    }
    using(_StreamReader = new System.IO.StreamReader(_networkStream, Encoding.UTF8))
    {
       //do stuff
    } 
 }
于 2013-05-14T08:41:38.603 回答