在這種特殊情況下,我正在編寫一個TCP/IP服務器,並使用TcpListener.BeginAcceptTcpClient()來接受傳入連接。服務器邏輯在實現IDisposable接口的單個類中實現:當調用Dispose()時,我想取消BeginAcceptTcpClient()操作。.NET取消異步I/O操作
現在更籠統地說:當使用.NET(Begin *和End *)的異步I/O模型時,如何取消操作?
我的想法是這樣的:
private volatile bool canceledFlag = false;
this.listener.BeginAcceptTcpClient(asyncResult =>
{
if(this.canceledFlag) return;
// ...
}, null);
的Dispose()將標誌設置爲true,也稱之爲this.listener.Stop()。 但是我記得已經讀過,對於每個Begin *調用都必須有一個匹配的End *調用,否則會發生不好的事情。
那麼我應該怎麼做呢?請注意,我正在尋找通用解決方案用Begin *和End *方法取消 - 我只是給了我具體的使用場景,以幫助您理解我的問題。
啊哈!非常感謝你!請您詳細介紹一下Dispose()和Close() - 有什麼區別? – ShdNx
沒有區別,Close()總是調用Dispose()。在.NET框架設計會議上,有一些痛苦和痛苦。 –
對不起,我的意思是TcpListener.Stop()vs TcpListener.Dispose()。看起來Dispose()是顯式實現的,所以我認爲這是因爲用戶主要是使用Stop()。那麼這裏有什麼不同? – ShdNx