Я также ищу лучшее решение. Но у меня есть уродливый обходной путь ...
По сути, я использую пару переданных по каналу fds для реализации механизма asyn c -vent. Так что он работает только на unix -подобных системах.
Вы можете взглянуть на код здесь .
Использование:
asio::io_context ctx;
AsyncEvent event{ctx.get_executor()};
event.Reset();
asio::co_spawn(ctx.get_executor(), /* coroutine that calls `co_await event.AsyncSet();' */, asio::detached);
co_await event.AsyncWait();
В этом же каталоге есть защелка.