XCode 16.4 日本語化計画
非同期作業の単位。
@frozen struct Task<Success, Failure> where Success : Sendable, Failure : Error
Task のインスタンスを作成する際は、そのタスクが実行する処理を含むクロージャを提供して下さい。タスクは作成後すぐに実行を開始できます。明示的に開始またはスケジュールする必要はありません。タスクを作成したら、そのインスタンスを使用してタスクを操作します。たとえば、タスクの完了を待機したり、キャンセルしたりできます。タスクの完了を待機またはキャンセルせずにタスクへの参照を破棄することは、プログラミング エラーにはなりません。タスクは、参照を保持しているかどうかに関係なく実行されます。ただし、タスクへの参照を破棄すると、そのタスクの結果を待機したり、タスクをキャンセルしたりする機能が放棄されます。
現在のタスク(独立したタスクまたは子タスクのいずれか)に対する操作をサポートするために、Task は yield() などのクラスメソッドも公開しています。これらのメソッドは非同期であるため、常に既存のタスクの一部として呼び出されます。
タスクの一部として実行されているコードのみが、そのタスクを操作できます。現在のタスクを操作するには、Task の静的メソッドのいずれかを呼び出して下さい。
タスクの実行は、タスクが実行された一連の期間と見なすことができます。各期間は、一時停止ポイントまたはタスクの完了時に終了します。これらの実行期間は、PartialAsyncTask のインスタンスによって表されます。カスタムで実行を実装しない限り、部分タスクを直接操作することはありません。
Task がその一部である言語レベルの同時実行モデルの詳細については、Swift プログラミング言語 の 同時実行 を参照してください。
タスクにはキャンセルを示す共通のメカニズムが含まれていますが、キャンセルの処理方法に関する共通の実装はありません。タスクで実行している作業に応じて、その作業を停止する正しい方法は異なります。同様に、停止が適切であればいつでも、タスクの一部として実行されているコードはキャンセルの有無を確認する責任があります。複数の部分を含む長いタスクでは、複数の時点でキャンセルの有無を確認し、各時点で異なる方法でキャンセルを処理する必要があります。作業を停止するためにエラーを throw するだけでよい場合は、Task.checkCancellation() 関数を呼び出してキャンセルの有無を確認します。キャンセルに対するその他の応答としては、そこまで完了した作業を返す、空の結果を返す、nil を返すなどがあります。
キャンセルは純粋なブール値であり、キャンセルの理由などの追加情報を含めることはできません。これは、タスクが様々な理由でキャンセルでき、キャンセルプロセス中に追加の理由が発生する可能性があることを反映しています。
タスクは、与えられたタスクによって実行されるコードを含むクロージャを渡すことで初期化されます。
このコードが完了まで実行され、タスクが完了し、失敗または結果値が返されると、このクロージャは即時解放されます。
タスクオブジェクトを保持しても、クロージャは無期限に保持されるわけではありません。タスクが保持する参照は、タスク完了後に解放されるためです。したがって、タスクが値への弱い参照をキャプチャする必要はほとんどありません。
たとえば、以下のコードスニペットでは、タスクが完了するとアクターの参照が解放され、タスクとそれを保持しているアクターの間の循環参照が切断されるため、アクターを weak としてキャプチャする必要はありません。
struct Work: Sendable {} actor Worker { var work: Task<Void, Never>? var result: Work? deinit { // even though the task is still retained, // once it completes it no longer causes a reference cycle with the actor print("deinit actor") } func start() { work = Task { print("start task work") try? await Task.sleep(for: .seconds(3)) self.result = Work() // we captured self print("completed task work") // but as the task completes, this reference is released } // we keep a strong reference to the task } }
これを以下のように使用します:
actor (アクター) は start() メソッドの self の使用によってのみ保持され、start メソッドは非構造化 Task の終了を待たずに即座に返すことに注意してください。タスクが完了し、そのクロージャが破棄されると、アクターへの強い参照も解放され、アクターは期待どおりに deinitialize (初期化解除) できるようになります。
したがって、上記の呼び出しは常に以下の出力になります。
start task work completed task work deinit actor
static var currentPriority: TaskPriority
現在のタスクの優先度。
static var basePriority: TaskPriority?
現在のタスクの基本優先度。
タスク優先度拡大ハンドラを登録しながら、渡された operation を実行します。現在が優先度拡大の対象である場合、ハンドラは現在のタスクと同時に実行されます。
  Beta  
throw するタスクが完了した後の結果。
throw しないタスクが完了した後の結果。
var result: Result<Success, Failure>
throw するタスクが完了した後の結果またはエラー。
タスクがキャンセルされたことを示すエラー。
このタスクをキャンセルします。
タスクの実行を停止すべきかどうかを示すブール値。
タスクの実行を停止すべきかどうかを示すブール値。
static func checkCancellation() throws
タスクがキャンセルされた場合エラーを throw します。
  廃止  
現在のタスクがキャンセルされた場合に直ちに呼び出されるキャンセルハンドラを使用して操作を実行します。
現在のタスクを一時停止し、他のタスクの実行を許可します。
static func sleep(nanoseconds: UInt64) async throws
現在のタスクを少なくともナノ秒単位で与えられた期間中断します。
与えられた期間、現在のタスクを中断します。
static func sleep<C>(until: C.Instant, tolerance: C.Instant.Duration?, clock: C) async throws
許容範囲内で与えられた期限まで現在のタスクを一時停止します。
static func == (Task<Success, Failure>, Task<Success, Failure>) -> Bool
2 つの値が等しいかどうかを示すブール値を返します。
static func != (Self, Self) -> Bool
2 つの値が等しくないかどうかを示すブール値を返します。
ハッシュ値です。
この値の必須コンポーネントを与えられたハッシュ関数に入力してハッシュします。
typealias Group   廃止  
typealias Handle   廃止  
typealias Priority   廃止  
static func CancellationError() -> CancellationError   廃止  
func getResult() async -> Result<Success, Failure>   廃止  
func get() async throws -> Success   廃止  
static func sleep(UInt64) async   廃止  
static func suspend() async   廃止  
static func withCancellationHandler<T>(handler: () -> Void, operation: () async throws -> T) async rethrows -> T   廃止  
与えられた throw する操作を、新しい 非構造化 のトップレベルタスクの一部として非同期的に実行します。
与えられた throw しない操作を、新しい 非構造化 トップレベルタスクの一部として非同期的に実行します。
init(name: String?, priority: TaskPriority?, operation: sending () async -> Success)
与えられた throw しない操作を、新しい 非構造化 トップレベルタスクの一部として非同期的に実行します。
init(name: String?, priority: TaskPriority?, operation: sending () async throws -> Success)
与えられた throw する操作を、新しい 非構造化 のトップレベルタスクの一部として非同期的に実行します。
func escalatePriority(to: TaskPriority)
このタスクのタスク priority (優先度) を手動で newPriority に拡大します。   Beta  
func get() async -> Success   廃止  
タスクの作成中に設定されている場合、現在のタスクの人間が読める名前を返します。
  Beta  
与えられた throw する操作を、新しい 非構造化の分離された トップレベルタスクの一部として非同期的に実行します。
与えられた throw しない操作を、新しい 非構造化の分離された トップレベルタスクの一部として非同期的に実行します。
与えられた throw する操作を、新しい 非構造化の分離された トップレベルタスクの一部として非同期的に実行します。
与えられた throw しない操作を、新しい 非構造化の分離された トップレベルタスクの一部として非同期的に実行します。
呼び出しスレッド/タスクのコンテキストで新しいタスクを作成し、すぐに実行を開始します。
  Beta  
呼び出しスレッド/タスクのコンテキストで新しいタスクを作成し、すぐに実行を開始します。
  Beta  
廃止されました。ソース互換性の理由からのみ利用可能です。
  廃止  
廃止されました。ソース互換性の理由からのみ利用可能です。
  廃止  
  廃止  
Copyable
Success が Copyable に準拠し, Success が Escapable に準拠し, Success が Sendable に準拠し, Failure が Error に準拠している場合準拠します。
Success が Copyable に準拠し, Success が Escapable に準拠し, Success が Sendable に準拠し, Failure が Error に準拠している場合準拠します。
Success が Copyable に準拠し, Success が Escapable に準拠し, Success が Sendable に準拠し, Failure が Error に準拠している場合準拠します。
SendableMetatype
動的に作成された子タスクを含むグループ。
動的な数の子タスクを含めることができる新しいスコープを開始します。
struct ThrowingTaskGroup
Throw し、動的に作成された子タスクを含むグループ。
動的な数の throw する子タスクを含めることができる新しいスコープを開始します。
struct TaskPriority
タスクの優先度。
struct DiscardingTaskGroup
動的に作成された子タスクを含む破棄するグループ。
動的な数の子タスクを含めることができる新しいスコープを開始します。
struct ThrowingDiscardingTaskGroup
動的に作成された子タスクを含む throw する破棄のグループ。
動的な数の子タスクを含めることができる新しいスコープを開始します。
struct UnsafeCurrentTask
現在のタスクへの安全でない参照。