I'm using asio's awaitable. Couroutines are pretty neat. One of the things that keeps cropping up in the ability to notify another function that something has finished. In the past, I would use condition_variable and wait on that. Is there a better way to do that with coroutines? eg, I want to do something like: asio::awaitable<void> function(std::mutex& mtx, condition_variable& cv) { std::unique_lock lock{mtx}; // suspend this function until notified or 30 seconds expired auto expired = co_await cv.wait_until(lock, std::chrono::seconds(30)); if (expired) { // or something log("expired"); co_return; } do_some_work(); } then somewhere else I might do: asio::awaitable<void> somewhere_else(condition_variable& cv) { do_other_work(); cv.notify_one(); } I understand that it's a bad idea to hold a lock during co_await. What other problems prevent something like this from being created? Does something like this already exist? It's not clear from asio reference. I'm using boost 1.81.0 but I can upgrade if that is a problem -- Keith Bennett