由于asio::co_spawn是使用协程来异步执行任务的,因此需要在编译时启用C++20和coroutine支持。
此外,co_spawn函数需要两个参数:一个io_context对象和一个协程对象。以下是一个使用co_spawn函数的示例代码:
#include
#include
#include
asio::awaitable async_print(asio::io_context& io)
{
std::cout << "start async_print" << std::endl;
// 等待5秒钟
co_await asio::steady_timer(io, std::chrono::seconds(5));
std::cout << "end async_print" << std::endl;
}
int main()
{
asio::io_context io;
asio::co_spawn(io, async_print(io), [](std::exception_ptr eptr) {
if (eptr) {
try {
std::rethrow_exception(eptr);
} catch (const std::exception& e) {
std::cerr << "exception: " << e.what() << std::endl;
}
}
});
io.run();
return 0;
}
这里的async_print函数使用co_await来等待一个定时器,并在定时器超时后输出一些信息。在main函数中,我们使用co_spawn来异步执行async_print函数,并在任务完成时运行一个回调函数。最后调用io.run()函数来开始事件循环。
值得注意的是,在使用co_await时需要包含