當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Swift ThrowingTaskGroup next()用法及代碼示例

實例方法

next()

等待下一個子任務完成,並返回它返回的值或重新拋出它拋出的錯誤。

聲明

mutating func next() async throws -> ChildTaskResult?

返回值

下一個完成的子任務返回的值。

詳述

對該方法的連續調用返回的值按照任務 completed 的順序出現,而不是按照這些任務添加到任務組的順序出現。例如:


group.addTask { 1 }
group.addTask { 2 }


print(await group.next())
// Prints either "2" or "1".

如果任務組中沒有任何掛起的任務,則此方法返回 nil ,它允許您編寫以下內容以等待單個任務完成:


if let first = try await group.next() {
   return first
}

它還允許您編寫如下代碼來等待所有子任務完成,並收集它們返回的值:


while let first = try await group.next() {
   collected += value
}
return collected

等待空組立即返回 nil 而不會暫停。

您還可以使用 for - await - in 循環來收集任務組的結果:


for await try value in group {
    collected += value
}

如果下一個子任務引發錯誤,並且您將該錯誤從此方法傳播到對ThrowingTaskGroup.withThrowingTaskGroup(of:returning:body:)方法,則該組中所有剩餘的子任務都被隱式取消。

不要從創建此任務組的任務外部調用此方法。在大多數情況下,Swift 類型係統可以防止這種錯誤;例如,因為 add(priority:operation:) 方法正在變異,所以不能像子任務一樣從並發執行上下文中調用該方法。

可用版本

iOS 13.0+, iPadOS 13.0+, macOS 10.15+, Mac Catalyst 13.0+, tvOS 13.0+, watchOS 6.0+

相關用法


注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 ThrowingTaskGroup next()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。