XCode 16.4 日本語化計画
与えられた throw する操作を、新しい 非構造化の分離された トップレベルタスクの一部として非同期的に実行します。
@discardableResult static func detached( name: String? = nil, executorPreference taskExecutor: (any TaskExecutor)?, priority: TaskPriority? = nil, operation: sending @escaping () async throws -> Success ) -> Task<Success, any Error>
Success が Sendable に準拠し Failure が any Error である場合時利用可能です。
name
人間が判読できるタスクの名前。
taskExecutor
子タスクが起動され、継続して使用されるタスク・エグゼキュータ。エグゼキュータ設定として明示的に nil を渡すと、設定なしと同等となり、実質的には外側のコンテキストのエグゼキュータ設定を継承することになります。globalConcurrentExecutor グローバル・エグゼキュータを明示的に渡すこともできます。
priority
operation (操作) タスクの優先度。このパラメータを省略するか、nil を渡すと、囲んでいるコンテキストの基本優先度が継承されます。
operation
実行すべき操作。
タスクへの参照。
operation (操作) でエラーが throw された場合、そのエラーは Task によってキャッチされ、タスクの value が待機されている場合にのみ再び throw されます。タスクの結果値を待機しないことで、誤ってエラーを無視しないよう注意してください。
子タスクなどの構造化された並行処理機能を使用して操作をモデル化できる場合は、分離した非構造化タスクを使用しないでください。子タスクは親タスクの優先度とタスクローカルな記憶装置を継承し、親タスクをキャンセルすると、その子タスクもすべて自動的にキャンセルされます。分離したタスクを使用する場合は、これらの考慮事項を手動で処理する必要があります。
Task.cancel() メソッドを呼び出してタスクをキャンセルしたい場合は、タスクへの参照を保持しておく必要があります。タスクへの参照を破棄しても、そのタスクが暗黙的にキャンセルされるわけではなく、明示的にキャンセルできなくなるだけです。