1/6

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.