Skip to content

结构化并发:使用TaskGroup

在Swift中,使用TaskGroup可以有效地管理并发任务。TaskGroup允许你创建一个任务组,并在其中并行执行多个异步任务。这样可以提高代码的可读性和执行效率。

创建TaskGroup

要创建TaskGroup,你可以使用TaskGroup类型。以下是一个简单的示例:

swift
await withTaskGroup(of: String.self) { group in
    group.addTask {
        return await fetchDataFromAPI1()
    }
    group.addTask {
        return await fetchDataFromAPI2()
    }
    
    for await result in group {
        print(result)
    }
}

在这个示例中,我们创建了一个任务组,添加了两个异步任务。每个任务都从不同的API获取数据。通过for await循环,我们可以逐个处理每个任务的结果。

处理任务结果

使用TaskGroup的一个重要优势是你可以轻松处理多个任务的结果。你可以将结果存储在数组中,或者直接在循环中处理。以下是一个处理结果的示例:

swift
var results: [String] = []

await withTaskGroup(of: String.self) { group in
    group.addTask {
        return await fetchDataFromAPI1()
    }
    group.addTask {
        return await fetchDataFromAPI2()
    }
    
    for await result in group {
        results.append(result)
    }
}

print("所有结果: \(results)")

在这个示例中,我们将每个任务的结果添加到results数组中,最后打印所有结果。

任务取消

TaskGroup还支持任务取消。当你需要取消某个任务时,可以使用Task.cancel()方法。以下是一个示例:

swift
await withTaskGroup(of: String.self) { group in
    group.addTask {
        return await fetchDataFromAPI1()
    }
    group.addTask {
        return await fetchDataFromAPI2()
    }
    
    // 取消任务
    Task.cancel()
    
    for await result in group {
        print(result)
    }
}

在这个示例中,我们在任务组中添加了两个任务,然后调用Task.cancel()来取消所有任务。这样可以有效地管理任务的生命周期。

结构化并发的优势

使用TaskGroup的结构化并发有以下几个优势:

  • 可读性:代码结构清晰,易于理解。
  • 错误处理:可以在任务组中集中处理错误。
  • 资源管理:自动管理任务的生命周期,避免内存泄漏。

通过使用TaskGroup,你可以更高效地处理并发任务,提升应用的性能和用户体验。🎉

本站使用 VitePress 制作