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
相关产品推荐
相关产品推荐

