Hello all, my experiments with custom composed operations in asio have led me to another question regarding the use of such methods. What do I do in order to have multiple handlers in flight, e.g. for a timer? My example is here: https://github.com/MrMoose/moose_tools/blob/master/TimedConnect.hpp I'm trying to realize an old dream in asio. A function that will take a socket and asynchronously do a resolve and connect to the result while having a timeout around the operation. Here in the test cases (lower part) is how I imagine usage: https://github.com/MrMoose/moose_tools/blob/master/test/TestAsioHelpers.cpp#... This works (the unit test does...) but I think it's no good and illustrate the problem. In the coroutine impl I can safely jump in and out and resume the code represented by the coroutine object as was explained to me yesterday. But what can I do with the timer? I cannot std::move(self) into it because it gets moved again moments later and I cannot yield on the timer wait operation. I want the timer handler and the async ops handlers both be in flight and have called whichever completes first. I tried coroutine fork thinking it might be the right tool but that seems to clash with the move-self-ahead pattern which is used here. If I don't yield and set the timer to a fixed lambda (as in the example above) it seems to work but I guess that's not how it's supposed to be, right? Any hints as to how I can make this better? Cheers, Stephan