構造体


TaskGroup


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


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

tvOS 13.0+ visionOS 1.0+ watchOS 6.0+

@frozen
struct TaskGroup<ChildTaskResult> where ChildTaskResult : Sendable




概観


タスクグループを作成するには、withTaskGroup(of:returning:body:) メソッドを呼び出します。


タスクグループを、それを作成したタスクの外部から使用しないでください。ほとんどの場合、Swift の型システムは、タスクグループがこのようにエスケープすることを防止します。これは、子タスクをタスクグループに追加することは変更操作であり、子タスクのような同時実行コンテキストからは変更操作を実行できないためです。



タスクの実行順序


タスクグループに追加されたタスクは同時に実行され、任意の順序でスケジュールできます。



キャンセル動作


タスクグループは、以下のいずれかの方法でキャンセルされます。


  • cancelAll() が呼び出されたとき、

  • このタスクグループを実行している Task がキャンセルされたとき。

  • TaskGroup は構造化された並行処理基本要素であるため、キャンセルはすべての子タスク(およびその子タスク)に自動的に伝播されます。


    キャンセルされたタスクグループは引き続きタスクを追加できますが、すぐにキャンセルが開始され、それに応じて動作する場合があります。既にキャンセルされたタスクグループに新しいタスクが追加されないようにするには、無条件にタスクを追加する単純な addTask(name:priority:body:) ではなく、 addTaskUnlessCancelled(name:priority:body:) を使用してください。


    TaskGroup が含まれる言語レベルの同時実行モデルの詳細については、Swift プログラミング言語同時実行 を参照してください。





    トピックス


    タスクグループへのタスクの追加


    func addTask(executorPreference: (any TaskExecutor)?, priority: TaskPriority?, operation: sending () async -> ChildTaskResult)

    グループに子タスクを追加します。


    func addTaskUnlessCancelled(executorPreference: (any TaskExecutor)?, priority: TaskPriority?, operation: sending () async -> ChildTaskResult) -> Bool

    グループがキャンセルされていない限り、グループに子タスクを追加します。タスクがグループに正常に追加されたかどうかを示すブール値を返します。



    個々の結果にアクセスする


    func next(isolation: isolated (any Actor)?) async -> ChildTaskResult?

    次の子タスクが完了するまで待機し、返された値を返します。


    var isEmpty: Bool

    グループに残りのタスクがあるかどうかを示すブール値。


    func waitForAll(isolation: isolated (any Actor)?) async

    グループの残りのタスクがすべて完了するまで待ちます。



    非同期の結果シーケンスへのアクセス


    func makeAsyncIterator() -> TaskGroup<ChildTaskResult>.Iterator

    この非同期シーケンスの要素を生成する非同期反復子を作成します。


    func allSatisfy((Self.Element) async throws -> Bool) async rethrows -> Bool

    非同期シーケンスによって生成されたすべての要素が与えられた述語を満たしているかどうかを示すブール値を返します。


    func compactMap<ElementOfResult>((Self.Element) async throws -> ElementOfResult?) -> AsyncThrowingCompactMapSequence<Self, ElementOfResult>

    値を返さない結果を省略し、基本シーケンスの要素にエラーを throw するクロージャをマップする非同期シーケンスを作成します。


    func compactMap<ElementOfResult>((Self.Element) async -> ElementOfResult?) -> AsyncCompactMapSequence<Self, ElementOfResult>

    与えられたクロージャを非同期シーケンスの要素にマップし、値を返さない結果を省略する非同期シーケンスを作成します。


    func contains(Self.Element) async rethrows -> Bool

    非同期シーケンスに与えられた要素が含まれているかどうかを示すブール値を返します。


    func contains(where: (Self.Element) async throws -> Bool) async rethrows -> Bool

    非同期シーケンスに、与えられた述語を満たす要素が含まれているかどうかを示すブール値を返します。


    func drop(while: (Self.Element) async -> Bool) -> AsyncDropWhileSequence<Self>

    与えられたクロージャが false を返すまで、その後、残りのすべての要素を渡し、基本非同期シーケンスから要素を省略します。


    func dropFirst(Int) -> AsyncDropFirstSequence<Self>

    基本非同期シーケンスから指定された数の要素を省略し、残りのすべての要素を渡します。


    func filter((Self.Element) async -> Bool) -> AsyncFilterSequence<Self>

    与えられた述語を満たす基本シーケンスの要素を順番に含む非同期シーケンスを作成します。


    func first(where: (Self.Element) async throws -> Bool) async rethrows -> Self.Element?

    指定された述語を満たすシーケンスの最初の要素を返します。


    func flatMap<SegmentOfResult>((Self.Element) async throws -> SegmentOfResult) -> AsyncThrowingFlatMapSequence<Self, SegmentOfResult>

    エラーを throw する与えら変換を呼び出した結果とこのシーケンスの各要素を連結する非同期シーケンスを作成します。


    func map<Transformed>((Self.Element) async throws -> Transformed) -> AsyncThrowingMapSequence<Self, Transformed>

    エラーを throw する与えられたクロージャを非同期シーケンスの要素にマップする非同期シーケンスを作成します。


    func map<Transformed>((Self.Element) async -> Transformed) -> AsyncMapSequence<Self, Transformed>

    与えられたクロージャを非同期シーケンスの要素にマップする非同期シーケンスを作成します。


    func max() async rethrows -> Self.Element?

    比較可能な要素の非同期シーケンス内の最大要素を返します。


    func max(by: (Self.Element, Self.Element) async throws -> Bool) async rethrows -> Self.Element?

    与えられた述語を要素間の比較として使用して、非同期シーケンス内の最大要素を返します。


    func min() async rethrows -> Self.Element?

    比較可能な要素の非同期シーケンス内の最小要素を返します。


    func min(by: (Self.Element, Self.Element) async throws -> Bool) async rethrows -> Self.Element?

    与えられた述語を要素間の比較として使用して、非同期シーケンス内の最小要素を返します。


    func prefix(Int) -> AsyncPrefixSequence<Self>

    基本非同期シーケンスの最初の要素を含む、指定された最大長さまでの非同期シーケンスを返します。


    func prefix(while: (Self.Element) async -> Bool) rethrows -> AsyncPrefixWhileSequence<Self>

    与えられた述語を満たす基本シーケンスの最初の連続要素を含む非同期シーケンスを返します。


    func reduce<Result>(Result, (Result, Self.Element) async throws -> Result) async rethrows -> Result

    与えられたクロージャを使用して非同期シーケンスの要素を結合した結果を返します。


    func reduce<Result>(into: Result, (inout Result, Self.Element) async throws -> Void) async rethrows -> Result

    変更可能な初期値を与えられて、与えられたクロージャを使用して非同期シーケンスの要素を結合した結果を返します。



    タスクのキャンセル


    var isCancelled: Bool

    グループがキャンセルされたかどうかを示すブール値。


    func cancelAll()

    グループ内の残りのタスクをすべてキャンセルします。



    サポートする型


    typealias Element

    この非同期シーケンスによって生成される要素の型。


    struct Iterator

    グループに追加されたタスクの結果に対する反復処理インターフェースを提供する型。


    typealias AsyncIterator

    この非同期シーケンスの要素を生成する非同期反復子の型。





    以下も見よ


    タスク


    struct Task

    非同期作業の単位。


    struct TaskGroup

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




    @@@@@@@@@@@@@@
    9/13ここまで
    @@@@@@@@@@@@@@


    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

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














    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ