【问题标题】:Are ASIO completion handlers invoked through the strand for cancelled operations?是否通过链调用 ASIO 完成处理程序以取消操作?
【发布时间】:2016-12-08 21:51:09
【问题描述】:

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

因此,正如我所见,完成处理程序将与错误代码 operation_aborted 一起排队。现在它们可以通过io_service 出列以进行调度。

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

【问题讨论】:

    标签: c++ boost boost-asio


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-22
      • 1970-01-01
      相关资源
      最近更新 更多