推荐答案
// www.javascriptcn.com code example
import Foundation
func processTasks() async {
await withTaskGroup(of: Int.self) { group in
for i in 1...5 {
group.addTask {
return await performTask(id: i)
}
}
var results = [Int]()
for await result in group {
results.append(result)
}
print("Results: \(results)")
}
}
func performTask(id: Int) async -> Int {
try? await Task.sleep(nanoseconds: 1_000_000_000) // 模拟耗时任务
return id * 2
}
Task {
await processTasks()
}本题详细解读
TaskGroup 的基本概念
TaskGroup 是 Swift 并发编程中的一个重要工具,用于管理一组并发的子任务。它允许你将多个任务分组,并在这些任务完成后收集它们的结果。TaskGroup 通常与 withTaskGroup(of:returning:body:) 函数一起使用。
使用步骤
创建 TaskGroup:通过
withTaskGroup(of:returning:body:)函数创建一个TaskGroup。这个函数接受一个闭包,闭包中你可以添加多个子任务。添加子任务:在
TaskGroup的闭包中,使用addTask方法添加子任务。每个子任务都会并发执行。收集结果:通过
for await循环遍历TaskGroup,收集每个子任务的结果。处理结果:在任务组中的所有任务完成后,你可以对结果进行处理。
代码解析
withTaskGroup(of: Int.self):创建一个TaskGroup,其中每个子任务的返回类型为Int。group.addTask:向任务组中添加子任务。每个子任务都会并发执行。for await result in group:等待并收集每个子任务的结果。performTask(id:):模拟一个耗时任务,返回id * 2作为结果。
注意事项
任务组的生命周期:
TaskGroup的生命周期由withTaskGroup函数管理,任务组中的所有任务完成后,withTaskGroup函数才会返回。任务取消:如果任务组中的某个任务被取消,整个任务组也会被取消。
结果顺序:
TaskGroup中的任务是无序的,结果的顺序可能与任务的添加顺序不一致。
通过 TaskGroup,你可以轻松地管理多个并发任务,并在它们完成后统一处理结果。