Boost C++ 库

…是世界上最受推崇、设计最精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ Coding Standards

co_spawn(6 个重载中的第 4 个) - Boost C++ 函数库
PrevUpHomeNext

启动一个新的基于协程的执行线程。

template<
    typename ExecutionContext,
    typename AwaitableExecutor,
    typename CompletionToken = DEFAULT>
DEDUCED co_spawn(
    ExecutionContext & ctx,
    awaitable< void, AwaitableExecutor > a,
    CompletionToken && token = DEFAULT,
    constraint_t< is_convertible< ExecutionContext &, execution_context & >::value &&is_convertible< typename ExecutionContext::executor_type, AwaitableExecutor >::value >  = 0);
参数

ctx

一个执行上下文,它将提供用于调度新执行线程的执行器。

a

调用协程入口点函数的结果 awaitable 对象。

标记

将用于处理线程执行完成通知的 完成令牌。完成处理程序的函数签名必须为

void handler(std::exception_ptr);
完成签名
void(std::exception_ptr)
示例
boost::asio::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), boost::asio::use_awaitable);

      co_await boost::asio::async_write(socket,
          boost::asio::buffer(data, n), boost::asio::use_awaitable);
    }
  }
  catch (const std::exception& e)
  {
    std::cerr << "Exception: " << e.what() << "\n";
  }
}

// ...

boost::asio::co_spawn(my_io_context,
  echo(std::move(my_tcp_socket)),
  boost::asio::detached);
每个操作的取消

新的执行线程在创建时具有仅支持 cancellation_type::terminal 值的取消状态。要更改取消状态,请调用 this_coro::reset_cancellation_state


PrevUpHomeNext