我有一个使用TcpClient
'sBeginAcceptTcpClient()
方法的线程。它类似于:
// this gets set elsewhere
ManualResetEvent _doneListening = new ManualResetEvent(false);
..并在线程程序中
while (true)
{
var result = BeginAcceptTcpClient(null, null);
var index = WaitHandle.WaitAny(new [] { _doneListening, result.AsyncWaitHandle });
if (0 == index)
{
break;
}
// do something with EndAcceptTcpClient(result)
}
现在,根据 MSDN 的文档:
异步 BeginAcceptTcpClient 操作必须通过调用 EndAcceptTcpClient 方法来完成。
我的问题与我的线程的取消/停止情况有关——也就是说,之后_doneListening.Set()
——我真的不想要更多的 TcpClients。同时,我不想泄漏内存。
是否需要调用 EndAcceptTcpClient()?这会阻塞,我当然不希望它(我想要一个快速线程退出)。但否则它会泄漏内存吗?MSDN 提示 Begin 必须与 End 配对。我应该遵循不同的模式来有效地取消可能正在进行的异步操作吗?