-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Open
Description
After calling "cancel()", "resolver.async_resolve()" will not return immediately. It will remain blocked until the operation is successful. The result of "error.message()" will be "Success", and "result" will not be empty.
Whether it is "use_awaitable" or callback functions, they cannot be cancelled.
`#include <asio.hpp>
int main()
{
using namespace std::chrono_literals;
asio::io_context ioc;
asio::ip::tcp::resolver resolver {ioc};
asio::cancellation_signal signal;
asio::co_spawn(ioc, [&]() -> asio::awaitable<void>
{
std::error_code error;
auto result = co_await resolver.async_resolve (
"www.baidu.com", "",
// asio::bind_cancellation_slot(signal.slot(), asio::redirect_error(libgs::use_awaitable, error))
asio::redirect_error(asio::use_awaitable, error)
);
std::cerr << error.message() << std::endl;
ioc.stop();
co_return ;
},
asio::detached);
asio::steady_timer timer {ioc, 1s};
timer.async_wait([&](std::error_code)
{
std::cout << "cancel" << std::endl;
// signal.emit(asio::cancellation_type::all);
resolver.cancel();
});
asio::executor_work_guard<asio::io_context::executor_type>
work {ioc.get_executor()};
ioc.run();
return 0;
}`
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels