0

我想知道为什么以下程序会崩溃。如何使用awaitablenot with boost::asio::async_write/async_read功能。

让我们来看看:

#include <iostream>

#include <boost/asio/io_context.hpp>
#include <boost/asio/co_spawn.hpp>
#include <boost/asio/detached.hpp>

using boost::asio::io_context;
using boost::asio::co_spawn;
using boost::asio::awaitable;
using boost::asio::detached;

awaitable<void> task() {
  std::cout << "hello" << std::endl;
  return awaitable<void>{};
}

int main() {
  try {
    boost::asio::io_context io_context(1);

    co_spawn(io_context, task(), detached);

    io_context.run();
  } catch(const std::exception &ex) {
    std::cerr << ex.what() << std::endl;
  }
  return 0;
}

这导致

hello
(Segmentation fault)

它有什么问题?

UPD:自行解决。我应该只使用co_return. 因此,它必须是以下内容:

awaitable<void> task() {
  std::cout << "hello" << std::endl;
  co_return;
}
4

1 回答 1

0

深入研究的来源boost::asio::awaitable,我发现我应该使用co_return关键字。令人惊讶的是,它没有boost. 它由-fcoroutinesflag 或启用-std=c++20。不料。说了这么多,就解决了。

于 2021-06-01T15:54:58.993 回答