假设有一个挂起的异步操作,它的完成处理程序在被取消时由一个包裹包裹 - 例如关闭一个套接字,取消一个计时器等。
因此,正如我所看到的,完成处理程序将排入错误代码operation_aborted
。现在他们可以通过io_service
出发来发送。
我讲这个故事的方式是对的吗?如果是这样,当io_service
调用完成处理程序时,即使它们是由取消的操作产生的,它是否通过链进行?
答案 0 :(得分:4)
是的,绝对的。启动的每个异步操作都完成,这是一个不变量。无论错误代码或成功如何,完成处理程序都以相同的方式执行 - 如果它被包裹,则处理程序将在链上执行。
通常,在这种情况下您不需要执行任何操作,并且处理程序只检查operation_aborted
和return
。但如果你想做任何事情,你可以。此外,回调对象的破坏可能会导致事情发生。例如,如果完成处理程序的调用是通过shared_ptr
,那么shared_ptr
的销毁可能会触发其他析构函数运行。