Rust async doesn't quite solve the cancellation problem either.
Sure, you can stop polling the future at any time, but that doesn't mean that you left the system state consistent.
Careful thought is needed on every call to await in an async function. It might be the last thing that async function ever does.
That's probably something that should be true in a well-implemented system anyway. After all, processes could be killed at any point.