Start here. This is the direct spoken answer to practice first.
Overview
A task that may outlive the client request needs a durable execution contract.
I keep short interactive tasks synchronous when the user needs an immediate answer and the work fits a bounded timeout. I use background processing for long generation, large files, batch work, retries across dependencies, or tasks that must survive client disconnects. The API returns an operation identifier and exposes status, result, failure, and cancellation explicitly.