是否通过 strand 调用 ASIO 完成处理程序来取消操作?
Are ASIO completion handlers invoked through the strand for cancelled operations?
假设有一个挂起的异步操作,当它被取消时,它的完成处理程序被一个链包裹着——例如通过关闭一个套接字、取消一个定时器等。
因此,如我所见,完成处理程序将使用错误代码 operation_aborted
排队。现在它们可以被 io_service
出队并被调度。
我讲这个故事的方式对吗?如果是这样,当 io_service
调用完成处理程序时,即使它们是取消操作的结果,它是否会通过链完成?
是的,绝对是。每个启动的异步操作都完成是不变的。无论错误代码或成功,完成处理程序都以相同的方式执行——如果它被链包裹,处理程序将在链上执行。
通常在这种情况下您不需要做任何事情,处理程序只检查 operation_aborted
和 return
。但如果你想做任何事,你可以。此外,回调对象的破坏可能会导致事情发生。例如,如果完成处理程序的调用是通过 shared_ptr
,那么 shared_ptr
的析构可能会触发其他析构函数 运行.
假设有一个挂起的异步操作,当它被取消时,它的完成处理程序被一个链包裹着——例如通过关闭一个套接字、取消一个定时器等。
因此,如我所见,完成处理程序将使用错误代码 operation_aborted
排队。现在它们可以被 io_service
出队并被调度。
我讲这个故事的方式对吗?如果是这样,当 io_service
调用完成处理程序时,即使它们是取消操作的结果,它是否会通过链完成?
是的,绝对是。每个启动的异步操作都完成是不变的。无论错误代码或成功,完成处理程序都以相同的方式执行——如果它被链包裹,处理程序将在链上执行。
通常在这种情况下您不需要做任何事情,处理程序只检查 operation_aborted
和 return
。但如果你想做任何事,你可以。此外,回调对象的破坏可能会导致事情发生。例如,如果完成处理程序的调用是通过 shared_ptr
,那么 shared_ptr
的析构可能会触发其他析构函数 运行.