나는 C#을 사용하여 합리적으로 경험했지만 이전에는이 문제를 경험하지 못했습니다. 경험이 풍부한 C# 개발자가이 상황에서해야 할 일을 알고 있는지 궁금합니다. 내가 코드 블록에 사용하여 문을 사용 할 필요가있는 경우 (문제가 코드 블록 이후 설명)스레딩을 사용하여 블록 사용
public void ConnectToRemoteServer()
{
Console.WriteLine("Attempting to connect to " + config.GetString(ConfigParams.MasterServerIp) + ":" + config.GetString(ConfigParams.MasterServerPort));
TcpClient client = new TcpClient();
IPEndPoint address = new IPEndPoint(IPAddress.Parse(config.GetString(ConfigParams.MasterServerIp)), config.GetInt(ConfigParams.MasterServerPort));
Console.WriteLine("Connecting...");
//Begin asynchronous sever communication
if (this.autoTask == null)
{
communicator = new CommunicationListener(client, config, address);
}
else
{
communicator = new CommunicationListener(client, config, address, this.autoTask);
}
Thread communicationThread = new Thread(new ThreadStart(communicator.Start));
communicationThread.Start();
}
부분 I 대해 궁금하네요있다 : 여기서 문제가되는 방법에 대한 코드입니다. 나는 TcpClient
이 인터페이스 IDisposable
을 구현 했으므로 using 문에 캡슐화해야한다는 것을 알고 있습니다. 그러나이 경우 TcpClient
을 사용하는 새 스레드가 시작되고 using
블록의 끝 부분에 도달하기 전에 TcpClient
이 사용되었습니다. 여기 using
성명을 사용해야합니까?
이 communcationsThread는 끝날 것입니까?또는 그것은 전체 시간을 실행할 것인가? 응용 프로그램이 종료 될 때까지 멈추지 않을 청취자처럼 들리는 소리. – Visions
이 경우에는 필요한 값을 다른 스레드로 전달한 다음 스레드에서 CommunicationListener 인스턴스를 인스턴스화하고 처리하도록하는 것이 더 바람직 할까 궁금합니다. 그렇다면 아직도 사용하고있는 물건을 처분하려는 데 이상한 행동의 위험을 감수하고 있지 않습니다. –
나는이 블록에서 using 블록의 끝에 암시 적 close() 결과를 사용 했으므로이 블록을 사용하지 않는 것이 옳다고 생각한다. 나는 이것이 블로깅을 사용하는시기에 대한 일반적인 조언이 "언제나 객체가 IDisposable을 함축하고있을 때"라는 점에서 상당히 일반적인 악화 원인이라고 생각합니다. –