我有一個線程使用TcpClient
的BeginAcceptTcpClient()
方法。它類似於:IAsyncResult開始/結束模式與取消
// 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暗示開始必須與End配對。我是否應該遵循不同的模式來有效取消潛在的進行中的異步操作?