I think async concurrent code is just much easier to reason about, regardless of threading. Also, for intra-request concurrency (e.g. i need to grab data from N different sources to complete this request), it's much easier to arrange for that work to be done concurrently. Also easier to implement highly responsive applications with async vs. threading.
Rust async functions are basically coroutines that suspend when you use await. Except that you can't return intermediate results (although once Generators are stabilized, that should resolve that use case).