ASIO完成处理程序是否通过链调用以取消操作?

时间:2016-12-08 21:51:10

标签: c++ boost boost-asio

假设有一个挂起的异步操作,它的完成处理程序在被取消时由一个包裹包裹 - 例如关闭一个套接字,取消一个计时器等。

因此,正如我所看到的,完成处理程序将排入错误代码operation_aborted。现在他们可以通过io_service出发来发送。

我讲这个故事的方式是对的吗?如果是这样,当io_service调用完成处理程序时,即使它们是由取消的操作产生的,它是否通过链进行?

1 个答案:

答案 0 :(得分:4)

是的,绝对的。启动的每个异步操作都完成,这是一个不变量。无论错误代码或成功如何,完成处理程序都以相同的方式执行 - 如果它被包裹,则处理程序将在链上执行。

通常,在这种情况下您不需要执行任何操作,并且处理程序只检查operation_abortedreturn。但如果你想做任何事情,你可以。此外,回调对象的破坏可能会导致事情发生。例如,如果完成处理程序的调用是通过shared_ptr,那么shared_ptr的销毁可能会触发其他析构函数运行。