Swift concurrency 6 — TaskGroup的理解与使用

SwiftUI中,TaskGroup 是一种处理并发任务的工具,特别适用于需要并发执行多个独立任务并在它们都完成后进行进一步处理的场景。TaskGroup 提供了一种结构化并发的方法,使得并行任务的启动、管理和结果收集变得更加简便和安全。

一、TaskGroup的基本概念

TaskGroupSwift 并发系统的一部分,它允许创建一组并行执行的任务,并在所有任务完成后进行后续操作。使用 TaskGroup 时,可以:

  1. 向组中添加多个并行任务。
  2. 等待所有任务完成,并收集它们的结果。
  3. 在任务执行过程中动态添加新的任务。

二、TaskGroup的基本用法

下面是使用 TaskGroup 的基本步骤:

  1. 创建一个 TaskGroup 实例。
  2. TaskGroup 中添加任务。
  3. 等待所有任务完成,并收集任务结果。

创建 TaskGroup 的方法主要有两种:withTaskGroupwithThrowingTaskGroup

withTaskGroup

withTaskGroup 是用于并行执行一组任务的结构。它允许我们启动多个子任务,并在所有子任务完成后汇总结果。它的主要特点是它不会抛出错误。

class TaskGroupViewModel: ObservableObject {
   
    @Published var images: [UIImage] = []
    
    private var urlStrings = [
        "https://picsum.photos/300",
        "https://picsum.photos/300",
        "https://picsum.photos/300",
        "https://picsum.photos/300",
        "https://picsum.photos/300",
        "https://picsum.photos/300",
        "https://picsum.photos/300",
        "https://picsum.photos/300",
        "https://picsum.photos/300",
        "https://picsum.photos/300",
        "https://picsum.photos/300",
        "https://picsum.photos/300",
        "https://picsum.photos/300",
        "https://picsum.photos/300",
        "https://picsum.photos/300",
        "https://picsum.photos/300",
        "https://picsum.photos/300"
    ]
    
    func fetchImageWithTaskGroup() async {
   
        await withTaskGroup(of: UIImage?.self) {
    group in
            for urlString in urlStrings {
   
                group.addTask {
   
                    try? await self.fetchImage(urlString: urlString)
                }
            }
            
            for await image in group {
   
                if let image {
   
                    images.append(image)
                }
            }
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值