XCode 16.4 日本語化計画
動的な数の子タスクを含めることができる新しいスコープを開始します。
@backDeployed(before: macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0) func withTaskGroup<ChildTaskResult, GroupResult>( of childTaskResultType: ChildTaskResult.Type = ChildTaskResult.self, returning returnType: GroupResult.Type = GroupResult.self, isolation: isolated (any Actor)? = #isolation, body: (inout TaskGroup<ChildTaskResult>) async -> GroupResult ) async -> GroupResult where ChildTaskResult : Sendable
グループは、すべての子タスクが完了するかキャンセルされるまで待機してから戻ります。この関数から戻った後、タスクグループは常に空になります。
グループの子タスクの結果を収集するには、for-await-in ループを使用して下さい。
var sum = 0 for await result in group { sum += result }
より詳細な制御が必要な場合、または結果が少数の場合、 next() を直接呼び出すことができます。
guard let first = await group.next() else { group.cancelAll() return 0 } let second = await group.next() ?? 0 group.cancelAll() return first + second
タスクグループで cancelAll() メソッドを呼び出すか、グループが実行中のタスクをキャンセルすることによって、タスクグループとそのすべての子タスクをキャンセルできます。
キャンセルされたグループ内に新しいタスクを作成するために addTask(name:priority:operation:) を呼び出すと、そのタスクは作成後すぐにキャンセルされます。あるいは、addTaskUnlessCancelled(name:priority:operation:) を呼び出すこともできます。これは、グループが既にキャンセルされている場合はタスクを作成しません。これら 2 つの関数のどちらかを選択することで、グループ内のキャンセルへの対応方法をあなたが制御できます。キャンセルの有無にかかわらず実行する必要がある子タスクもあれば、有用な結果を生成できないことが分かっている場合は作成しない方がよいタスクもあります。
このメソッドでグループにあなたが追加するタスクは throw しないため、キャンセルが発生した場合に CancellationError を throw して応答することはできません。タスクは、完了した作業を返す、空の結果を返す、nil を返すなど、何らかの方法でキャンセルを処理しなければなりません。エラーを throw してキャンセルを処理する必要があるタスクの場合は、代わりに withThrowingTaskGroup(of:returning:body:) メソッドを使用してください。
非同期作業の単位。
動的に作成された子タスクを含むグループ。
struct ThrowingTaskGroup
Throw し、動的に作成された子タスクを含むグループ。
動的な数の throw する子タスクを含めることができる新しいスコープを開始します。
struct TaskPriority
タスクの優先度。
struct DiscardingTaskGroup
動的に作成された子タスクを含む破棄するグループ。
動的な数の子タスクを含めることができる新しいスコープを開始します。
struct ThrowingDiscardingTaskGroup
動的に作成された子タスクを含む throw する破棄のグループ。
動的な数の子タスクを含めることができる新しいスコープを開始します。
struct UnsafeCurrentTask
現在のタスクへの安全でない参照。