一个简单的功能:
awaitable<std::size_t> write(const std::vector<uint8_t>& data)
{
auto token = co_await this_coro::token();
return co_await async_write(serialport_, buffer(data), token);
}
可以等待使用co_await write(my_data)
。
这在我使用任何异步 Boost ASIO 功能时有效。
如果异步函数是来自某个不相关库的回调,人们将如何使用这种模式?
该代码可能看起来像:
awaitable<bar> foo()
{
auto token = co_await this_coro::token();
return co_await third_party_callback;
}
用法类似于auto result = co_await foo()
.
我很难弄清楚最简单/最干净的方法是什么。
附赠问题:Boost ASIO 的协程 API(例如令牌)、Boost 的协程库和 Coroutines TS 之间有什么关系?