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

Are ASIO completion handlers invoked through the strand for cancelled operations?

假设有一个挂起的异步操作,当它被取消时,它的完成处理程序被一个链包裹着——例如通过关闭一个套接字、取消一个定时器等。

因此,如我所见,完成处理程序将使用错误代码 operation_aborted 排队。现在它们可以被 io_service 出队并被调度。

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

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

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