See what richard said: you can have asio run on io_uring already. You can then
The problem is, this gets said a lot but no one really understands it. There's a lot to benefit from io_uring that Asio simply can't support so saying that "Asio can use io_uring" is technically true but it's largely disingenuous because it neglects all the good parts of io_uring that _can't_ be used. I don't wanna derail the conversation with all those details but I can expand upon this if required.
If you want to use your own event loop, you can write an executor for it, too.
I see. Is this as a replacement for the one used internally by Async?
Most likely UB. The await_suspend(std::coroutine_handle<T> h) can however grab the executor from the promise, by calling h.promise().get_executor() (after checking with a requires statement) if you need to post back.
Why would this be UB? - Christian