Async ruined rust and I’ll stand by that until I die
One annoying thing is that it's optimised for multi-threaded runtimes, so the APIs enforce lifetime requirements which don't make sense for single-threaded async applications.
Async in an embedded context is actually really nice, too. You can have high level "send this thing over SPI, receive this data from USB" futures and they will run (ideally via DMA) and your CPU can go to sleep, only waking up when interrupts fire from the hardware peripherals you were using.