我有一个连接到某个网络服务器(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()方法。我应该为所有人打电话吗?或者只有其中一个?是否需要发布一些资源?
答案 0 :(得分:2)
将它们放在using
块中。在操作完成后,它将适当地关闭和处理每个流。
using (StreamReader reader = new StreamReader(_networkStream, Encoding.UTF8))
{
}
答案 1 :(得分: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
}
}