启动一个新的基于协程的执行线程。
template< typename Executor, typename T, typename AwaitableExecutor, typename CompletionToken = DEFAULT> DEDUCED co_spawn( const Executor & ex, awaitable< T, AwaitableExecutor > a, CompletionToken && token = DEFAULT, constraint_t<(is_executor< Executor >::value||execution::is_executor< Executor >::value) &&is_convertible< Executor, AwaitableExecutor >::value > = 0);
void(std::exception_ptr, T)
boost::asio::awaitable<std::size_t> echo(tcp::socket socket) { std::size_t bytes_transferred = 0; 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); bytes_transferred += n; } } catch (const std::exception&) { } co_return bytes_transferred; } // ... boost::asio::co_spawn(my_executor, echo(std::move(my_tcp_socket)), [](std::exception_ptr e, std::size_t n) { std::cout << "transferred " << n << "\n"; });
新执行线程的创建将支持 cancellation_type::terminal
类型值的取消状态。要更改取消状态,请调用 this_coro::reset_cancellation_state
。