【发布时间】:2011-11-14 18:04:00
【问题描述】:
在这种特殊情况下,我正在编写一个 TCP/IP 服务器,并且我正在使用 TcpListener.BeginAcceptTcpClient() 来接受传入的连接。服务器逻辑在实现 IDisposable 接口的单个类中实现:当调用 Dispose() 时,我想取消 BeginAcceptTcpClient() 操作。
现在更笼统地说:当使用 .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* 方法取消的通用解决方案 - 我只是为您提供了具体的使用场景,以帮助您理解我的问题。
【问题讨论】:
标签: c# .net asynchronous io