Given how dynamic an async executor is, there's a lot that doesn't get compiled out. Rust doesn't seem to optimise well across dyn boundaries. (I haven't bothered investigating: I usually just rewrite my program to work better, because if I'm encountering this case there's probably other stuff wrong too.)