首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >增强ASIO和co_await-与任何第三方回调一起使用?

增强ASIO和co_await-与任何第三方回调一起使用?
EN

Stack Overflow用户
提问于 2019-03-01 22:10:14
回答 1查看 1.6K关注 0票数 3

一个简单的函数:

代码语言:javascript
复制
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)等待。

当我使用任何async Boost ASIO函数时,这是有效的。

如果异步函数是来自一些不相关库的回调,那么如何使用这种模式呢?

代码可能看起来像这样:

代码语言:javascript
复制
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的协程库和协程TS之间的关系是什么?

EN

回答 1

Stack Overflow用户

发布于 2019-03-04 08:47:52

要使用另一个库,另一个库必须创建对协程TS的支持,或者您(或其他人)必须提供协程TS工作所需的代码和第三方库之间的“粘合”代码。

一旦你了解了协程TS需要什么才能工作,那么做这件事的努力可能就不多了。

你可以在co routines TS上阅读Lewis Baker articles。现在有很多人的视频和文章都在报道这个话题。一旦您理解了需求,支持其他等待类型就很简单了,只要您有某种方法来通知co例程何时完成,并且您也有某种上下文来继续co例程的完成。

如果第三方库只是做一些繁重的处理工作。您可能希望将工作包装到某种类型的boost future / promise设置中,并使用像this one一样已经存在的boost线程粘合代码(尽管boost asio示例早于boost asio实验支持。

实验标记是co例程TS和boost asio之间的“粘合”代码(据我所知)。它与Boost的协程程序库没有任何关系。

Boost ASIO支持3种co例程类型:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54946344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档