[Pitch] Structured Task Cancellation Tokens

If multiple nested scopes are an issue, would using variadic generics be an option?

await withCancellationReasons(.timeout(.seconds(30)),  .resourceLimit(.memory(1GB))) { timeout, resourceLimit in
      try await process() 

      switch (timeout.reason, resourceLimit.reason) {
      case (let timeout?, _):
        // timed out
      case (nil, let resourceLimit?):
        // resource limit
      }
}
1 Like