在使用boost :: asio 1.66时,我在文档中看到boost::asio::io_context::post
不推荐使用boost::asio::post
,而boost::asio::io_context::dispatch
则不推荐使用。因为在它们之前io_context
的成员函数之前,并且当然需要在某些io_context
的上下文中执行处理程序,即executor
,所以我的问题是:
boost :: asio :: io_context :: post最简单的重载如何知道要使用哪个io_context
即executor
?
template< typename CompletionToken> DEDUCED post(CompletionToken && token);
的文档中指出
通过执行get_associated_executor(handler)获得处理程序的关联执行程序对象ex。
但是get_associated_executor
的文档也不清楚。我的猜测是由于 Template参数扣除,它可以以某种方式在当前执行的处理程序中获取它,但是我想确保,而且,如果我在外部调用post
,这还不够boost :: asio处理程序。
答案 0 :(得分:1)
文档的核心可以找到associated_executor
trait:
get()
如果T具有嵌套类型executor_type,则返回t.get_executor()。否则返回ex。
executor_type
如果T具有嵌套类型executor_type,则为T :: executor_type。否则为执行人。
如果处理程序类型¹具有嵌套的executor_type
类型,则假定调用token.get()
将返回要使用的正确执行程序。
如果传递可传递消息的普通调用而不指定执行者/执行上下文,您将获得执行上下文的默认构造实例:boost::asio::system_executor
。
此操作的目的是使用自定义处理程序类型来实现DoTheRightThing。例如。如果在链上发布内容,则处理程序将被包装为特定于链实现的类型。 associated_executor
特征和同上的get_executor()
成员函数将进行协调,以直接指向该链的执行者。
¹或任何令牌,以防您的调用模型不同(例如收益上下文)