Although async #Rust can be confusing, I must say it has some nice features that I miss when using other languages.
For example, if I want to do a compound async operation (like fetching a web page over HTTP) but cancel it if it's taking too long, in Rust this is trivial—just race it against a timer, and drop it if the timer wins. When a future is dropped, any async operations it owns are cancelled.
In the other languages I've seen, this is difficult if not impossible.