【发布时间】:2021-04-23 12:49:33
【问题描述】:
我正在尝试使用 boost asio 的 C++20 协程。我目前的意图是在来自https://www.boost.org/doc/libs/1_75_0/doc/html/boost_asio/example/cpp17/coroutines_ts/echo_server.cpp 的协程示例中嵌入一个简单的暂停点。
据我了解https://en.cppreference.com/w/cpp/coroutine/suspend_always 此处的文档,此调用应有效:
co_await suspend_always{};
在这个协程内部:
awaitable<void> echo(tcp::socket socket)
{
try
{
char data[1024];
for (;;)
{
std::size_t n = co_await socket.async_read_some(boost::asio::buffer(data), use_awaitable);
co_await suspend_always{}; // <-- here
co_await async_write(socket, boost::asio::buffer(data, n), use_awaitable);
}
}
catch (std::exception& e)
{
std::printf("echo Exception: %s\n", e.what());
}
}
但是,有一个编译器错误:
error: no matching member function for call to 'await_transform'
co_await suspend_always{};
^~~~~~~~
谁能解释一下,如何不使用带有async_wait的计时器将暂停点引入上述协程。
【问题讨论】:
标签: c++ boost coroutine c++20 asio