gpt4 book ai didi

c++ - 如何通过我自己的函数传递boost::asio::yield_context?

转载 作者:行者123 更新时间:2023-12-01 14:58:02 24 4
gpt4 key购买 nike

给一个协程生成..

void my_coroutine(asio::yield_context yield) {
system::error_code ec;
my_wrapper(yield[ec]);
if (ec) {
// something went wrong
return;
}
...
}

void my_wrapper(asio::yield_context&& yield) {
asio::async_read(..., yield); // any asio async call
if (ec) {
// something went wrong
return;
}
...
}

在包装函数中,无法从传递的yield上下文访问ec。那么如何解决呢?

最佳答案

您想/ oji /使用ec做什么?您可以访问的方式与my_coroutine已经显示的方式完全相同:

void my_wrapper(asio::yield_context&& yield) {
system::error_code ec;
asio::async_read(..., yield[ec]); // any asio async call
if (ec) {
// something went wrong
return;
}
...
}

如果您表示要进行可组合的异步操作,请参见以下模式:
  • How to set error_code to asio::yield_context

  • 基本示例:
    template <typename Token>
    auto async_meaning_of_life(bool success, Token&& token)
    {
    #if BOOST_VERSION >= 106600
    using result_type = typename asio::async_result<std::decay_t<Token>, void(error_code, int)>;
    typename result_type::completion_handler_type handler(std::forward<Token>(token));

    result_type result(handler);
    #else
    typename asio::handler_type<Token, void(error_code, int)>::type
    handler(std::forward<Token>(token));

    asio::async_result<decltype (handler)> result (handler);
    #endif

    if (success)
    handler(error_code{}, 42);
    else
    handler(asio::error::operation_aborted, 0);

    return result.get ();
    }

    关于c++ - 如何通过我自己的函数传递boost::asio::yield_context?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60442680/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com