The pain only exists if you're trying not to use Tokio that has 90% "market share" of Rust runtimes.
I get that it is sometimes needed (if you use GTK or browser JS as your async runtime, or write your own executor).
But for majority users there is only one runtime and there's no compatibility problem. Tokio won, and network effects killed everything else. Think of it like Golang's choice of runtimes (there isn't one).