CancellationError は isCancelled == true のときに Task.checkCancellation が投げるエラーというだけで、キャンセルされたときに throw されるエラーは CancellationError とは限らないという仕様なのかな? catch let error as CancellationError でキャンセルをチェックするのではなく、 catch 節の中で Task.isCancelled でチェックするのが正しい? (edited)URLSession の data(from:) がどこで実装されてるのか見つからない・・・。CancellationError()
CancellationError を throw しなくても良い?でも CancellationError
CancellationError を throw することが期待されている? URLSession.data(from:) が cancel 時に CancellationError を throw しないのはお行儀が悪い? https://github.com/apple/swift-evolution/blob/main/proposals/0304-structured-concurrency.md#cancellation
(edited)CancellationError, to communicate that the task was cancelled. CancellationError として検出できるように、くらいの意味まで持つならキャンセル時に独自のエラーを throw するのではなく CancellationError を throw すべきとなりそうだけど。
do { try await foo() } catch let error as CancellationError { // キャンセル時の処理 } catch { // エラーハンドリング } とするよりも do { try await foo() } catch { if Task.isCancelled { // キャンセル時の処理 } else { // エラーハンドリング } } がベストプラクティス? (edited)