Start here. This is the direct spoken answer to practice first.
Why this question matters
Request cancellation protects server capacity when the caller goes away, but it is cooperative and cannot undo a side effect that already crossed its commit boundary.
I accept the request CancellationToken in the endpoint and pass it through every cancellable async dependency, including EF Core queries and outbound HTTP calls. ASP.NET Core cancels that token when the request is aborted, so work that no longer has a caller can stop early. Cancellation is cooperative: each operation must observe the token and either stop or complete consistently. I do not treat cancellation as rollback for a database commit, payment, or published message.