使用Boost.Asio的协程时,我该如何“手动”进行yield以便给另一个协程或异步操作运行的机会?例如,在从TCP套接字接收到命令后,我需要执行长时间计算才能发送响应:
asio::spawn(strand_, [this, self](asio::yield_context yield)
{
char data[256];
while (socket_.is_open())
{
size_t n = socket_.async_read_some(boost::asio::buffer(data),
yield);
if (startsWith(data, "computePi"))
{
while (!computationFinished)
{
computeSomeMore();
yield; // WHAT SHOULD THIS LINE BE?
}
storeResultIn(data);
boost::asio::async_write(socket_, boost::asio::buffer(data, n),
yield);
}
}
});