asio 不做任何延迟的原因是什么?

What is the reason asio doesn't do any delay?

我是 asio 的新手。

这是我在编写白天 tcp-server 时遵循的指南:https://think-async.com/Asio/asio-1.18.1/doc/asio/tutorial/tutdaytime3.html。我试图重现一个合理的示例,该示例将表明非同步代码实际上是异步的。我没有修改其他任何东西,只是 tcp_server class 中的一小段代码。我添加这个延迟是为了看到在我们等待计时器到期后,我们可以优雅地处理其他客户端 connections/requests。那么,我错过了什么吗?因为在我的情况下,延迟基本上不起作用;(

void handle_accept(const tcp_connection::pointer &new_connection,
                   const asio::error_code &error) {

    asio::steady_timer timer(io_context_,  asio::chrono::seconds(5));

    std::cout << "Before timer" << std::endl;

    timer.async_wait(std::bind(&tcp_server::handle_wait, this, error, new_connection));
}

void handle_wait(asio::error_code &ec, const tcp_connection::pointer &new_connection) {
    if (!ec) {
        new_connection->start();
    }

    std::cout << "Inside timer" << std::endl;

    start_accept();
}
void handle_accept(const tcp_connection::pointer &new_connection,
                       const asio::error_code &error) {

        asio::steady_timer timer(io_context_,  asio::chrono::seconds(5));

        std::cout << "Before timer" << std::endl;

        timer.async_wait(std::bind(&tcp_server::handle_wait, this, error, new_connection));
    }

timer是局部变量。

async_wait returns 立即,无阻塞。

函数退出,破坏timertimer 取消所有挂起的操作(使用 error::operation_aborted)。

确保计时器的生命周期足够长以允许它过期(或至少直到它不再相关)。 在您的情况下,您的 class 中可能已经有一个 tcp::acceptor 成员,并且计时器可能位于它旁边