问题是,我想创建一个全局示例,我将能够单独使用每个协程,以保持在那里,例如,命名范围的列表,例如,出于日志的目的。
从而当boost::asio::spawn
被调用时,新的自定义状态将被附加到新运行的协同程序。
作为一种猜测,作为一种变通方法,它可以通过一个由smth索引的全局std::unordered_map
来完成,类似于std::this_thread::get_id()
,但用于协程,但目前我还不知道类似的事情。
如果可以通过定制asio::yield_context
来实现这一点,那就太完美了。它可以保持cancellation_slot
,executor
,为什么它不能保持额外的状态呢?我已经尝试挖掘yield_context
的增强源,但是我在那里迷路了,这就是为什么我希望在这个问题上有一些见解。
1条答案
按热度按时间juzqafwq1#
您需要为自定义类型实现
await_transform
。这允许您与承诺类型通信。当然,这是库的实现细节,因此您还没有看到它。下面是
this_coro::executor_t
的await_transform:您可以使用自己的promise-type创建自己的可等待类型,这会添加自定义状态。
这里有大量的代码,编写起来会很困难(对我来说是)。您可能应该阅读更简单的协程教程(尽可能“简单”,但并不十分简单)。
我听过很多精彩的演讲
Raymond Chen的这篇博客系列文章看起来非常贴切。特别是这篇文章应该会让你接近目标:C++ coroutines: Snooping in on the coroutine body