中止
在 Boost.Asio 中,许多对象(如套接字和计时器)通过其 close 或 cancel 成员函数支持对未完成的异步操作进行全局取消。然而,某些异步操作还支持针对特定操作的单独取消。实现这种逐操作的取消机制是通过指定每个异步代理都有一个关联的取消槽来实现的。
为了支持取消,一个异步操作会将取消处理程序安装到代理的取消槽中。取消处理程序是一个函数对象,当用户向取消槽发出取消信号时,该函数对象会被调用。由于取消槽是与单个代理关联的,所以每次该槽中最多只能容纳一个处理程序,安装新处理程序会覆盖之前安装的处理程序。因此,同一个槽会在代理中的后续异步操作中重复使用。
取消机制在异步操作包含多个子代理时特别有用。例如,一个子代理可能已完成,而另一个子代理此时被取消,因为它的副作用不再需要。
See Also
Last updated