関数


withTaskGroup(of:returning:isolation:
body:)


動的な数の子タスクを含めることができる新しいスコープを開始します。


iOS 13.0+ iPadOS 13.0+ Mac Catalyst 13.0+ macOS 10.15+

tvOS 13.0+ visionOS 1.0+ watchOS 6.0+

@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

すべてのタスクグループ間で共有される意味の詳細については、TaskGroup のドキュメントを参照してください。


以下も見よ

TaskGroup





以下も見よ


タスク


struct Task

非同期作業の単位。


struct TaskGroup

動的に作成された子タスクを含むグループ。


struct ThrowingTaskGroup

Throw し、動的に作成された子タスクを含むグループ。


func withThrowingTaskGroup<ChildTaskResult, GroupResult>(of: ChildTaskResult.Type, returning: GroupResult.Type, isolation: isolated (any Actor)?, body: (inout ThrowingTaskGroup<ChildTaskResult, any Error>) async throws -> GroupResult) async rethrows -> GroupResult

動的な数の throw する子タスクを含めることができる新しいスコープを開始します。


struct TaskPriority

タスクの優先度。


struct DiscardingTaskGroup

動的に作成された子タスクを含む破棄するグループ。


func withDiscardingTaskGroup<GroupResult>(returning: GroupResult.Type, isolation: isolated (any Actor)?, body: (inout DiscardingTaskGroup) async -> GroupResult) async -> GroupResult

動的な数の子タスクを含めることができる新しいスコープを開始します。


struct ThrowingDiscardingTaskGroup

動的に作成された子タスクを含む throw する破棄のグループ。


func withThrowingDiscardingTaskGroup<GroupResult>(returning: GroupResult.Type, isolation: isolated (any Actor)?, body: (inout ThrowingDiscardingTaskGroup<any Error>) async throws -> GroupResult) async throws -> GroupResult

動的な数の子タスクを含めることができる新しいスコープを開始します。


struct UnsafeCurrentTask

現在のタスクへの安全でない参照。














トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ