There is no cancel() in async Rust. Cancellation is dropping the future.
{
let mut req = Request { .. };
poll(&mut req); // started
poll(&mut req); // still pending
} // dropped here — cancelled
The state machine is destroyed wherever it happened to be suspended. Every local it was holding drops, in the usual order. That is the entire cleanup mechanism.
