在这个特定的情况下,我正在编写一个TCP/IP服务器,并使用TcpListener.BeginAcceptTcpClient()来接受传入的连接。服务器逻辑实现在一个实现IDisposable接口的单个类中:当调用Dispose()时,我想取消BeginAcceptTcpClient()操作。
现在更一般地说:在使用.NET的异步I/O模型(Begin*和End*)时,如何取消操作?
我的想法是这样的:
现在更一般地说:在使用.NET的异步I/O模型(Begin*和End*)时,如何取消操作?
我的想法是这样的:
private volatile bool canceledFlag = false;
this.listener.BeginAcceptTcpClient(asyncResult =>
{
if(this.canceledFlag) return;
// ...
}, null);
Dispose()会将标志设置为true,并调用this.listener.Stop()。 但是我记得阅读过,对于每个Begin*调用都必须有一个匹配的End*调用,否则会发生不好的事情。
那么我该怎么做呢?请注意,我正在寻找适用于Begin*和End*方法取消的通用解决方案 - 我只是提供了具体使用场景以帮助您理解我的问题。