小编Tel*_*gar的帖子

立即启动协程 C++ asio

当使用预协程 asio 接口时,我可以在当前执行上下文(主函数)中调度一个异步函数,并让它在ctx.

#include <iostream>
#include <asio.hpp>
using namespace std;
using namespace literals;

int main() {
    asio::io_context ctx;
    asio::steady_timer t(ctx, 2s);
    asio::dispatch([&](){
        cout << "inside coro before wait" << endl;
        t.async_wait([](asio::error_code){
            cout << "inside coro after wait" << endl;
        });
    });
    cout << "starting ctx.run()" << endl;
    ctx.run();
}
Run Code Online (Sandbox Code Playgroud)
$ ./sol
inside coro before wait
starting ctx.run()
inside coro after wait
Run Code Online (Sandbox Code Playgroud)

我想用协程复制它,asio::awaitabledispatch不支持协程。

另一方面,co_spawn仅将协程添加到上下文中,并且不会立即启动它。

我可以使用ctx.poll()/ctx.run_one()但协程必须是唯一准备执行的协程,或者至少是第一个协程。

答案

如果我没有弄错的话,启动协程(从协程外部)的唯一方法是使用asio::co_spawn(executor, awaitable, …

c++ boost-asio

6
推荐指数
1
解决办法
405
查看次数

标签 统计

boost-asio ×1

c++ ×1