Avatar
昨日、ちょうど同じようなところを見ていて、メソッド内でCancellationErrorをスローしたい場合は https://github.com/apple/swift-evolution/blob/main/proposals/0304-structured-concurrency.md#cancellation-handlers のソースコード例に書いてあるように(urlSessionTask captureしないとコンパイルできない) func download(url: URL) async throws -> Data? { var urlSessionTask: URLSessionTask? return try withTaskCancellationHandler { return try await withUnsafeThrowingContinuation { continuation in urlSessionTask = URLSession.shared.dataTask(with: url) { data, _, error in if let error = error {     ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ // Ideally translate NSURLErrorCancelled to CancellationError here continuation.resume(throwing: error) } else { continuation.resume(returning: data) } } urlSessionTask?.resume() } } onCancel: { urlSessionTask?.cancel() // runs immediately when cancelled } } withTaskCancellationHandler使って手動でチェックするのがいいんですかね?(結局呼び出し側でError Typeチェックしなければいけないので、あまり意味ない気もしますが...)🤔 (edited)