You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中如何通过withDiscardingTaskGroup获取任务执行结果?

Swift中withTaskGroup与withDiscardingTaskGroup获取任务结果的用法

一、用withTaskGroup获取任务完成数据

在Swift里,withTaskGroup可以直接遍历任务组来获取每个任务的返回数据,示例代码如下:

await withTaskGroup(of: String.self) { group in
    group.addTask { "Task 1 data" }
    group.addTask { "Task 2 data" }
    
    // 在任务组闭包内遍历获取结果
    for await result in group {
        print(result) // 输出任务完成后的数据
    }
}

二、用withDiscardingTaskGroup获取已完成任务的数据

withDiscardingTaskGroup默认会丢弃任务的返回结果,但如果需要收集任务数据,可以通过捕获外部变量或结合异步流的方式实现,以下是具体示例:

方法1:通过外部可变变量收集结果

var taskResults: [String] = []

await withDiscardingTaskGroup { group in
    group.addTask {
        let result = "Task 1 data"
        taskResults.append(result)
        return result
    }
    group.addTask {
        let result = "Task 2 data"
        taskResults.append(result)
        return result
    }
}

// 任务组执行完毕后处理收集到的结果
for result in taskResults {
    print(result)
}

方法2:结合AsyncStream实现流式获取结果

如果想要类似withTaskGroup的实时遍历体验,可以用AsyncStream来传递任务结果:

let resultStream = AsyncStream(String.self) { continuation in
    Task {
        await withDiscardingTaskGroup { group in
            group.addTask {
                let result = "Task 1 data"
                continuation.yield(result)
                return result
            }
            group.addTask {
                let result = "Task 2 data"
                continuation.yield(result)
                return result
            }
        }
        continuation.finish()
    }
}

// 实时获取并输出任务结果
for await result in resultStream {
    print(result)
}

补充说明

withDiscardingTaskGroup的设计目标是执行无需返回结果的异步任务,它不会保留任务的返回值。因此要获取结果,必须在任务内部主动将数据传递到外部作用域,上述两种方式是最常用的解决方案。

内容的提问来源于stack exchange,提问作者shoji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 11:42:43