Start here. This is the direct spoken answer to practice first.
Why this question matters
Parallel work creates multiple outcomes, not one linear try/catch path. The caller needs an explicit contract for first failure, remaining work, partial success, retry, and cancellation.
I would keep ownership of every started operation and await the whole group so exceptions are observed. Cancellation should be passed to each operation and checked cooperatively, while the coordinator stops scheduling new work when cancellation or a fail-fast policy applies. I would decide whether the batch is all-or-nothing, best-effort, or itemized partial success before choosing the return type. A canceled or incomplete batch must not be reported as successful merely because some items finished.