Swift中同时启动并等待两个返回Void的异步函数有哪些其他实现方式?
Swift中同时启动并等待两个异步函数的其他实现方式
当然有其他几种可行的实现方式,下面是常见的几种:
1. 使用TaskGroup
这是Swift并发框架里专门用来管理多个异步任务的工具,适合批量处理任务的场景:
Task { await withTaskGroup(of: Void.self) { group in group.addTask { await task1() } group.addTask { await task2() } // 等待所有任务完成 await group.waitForAll() } } func task1() async { } func task2() async { }
如果任务有返回值,只需把of:的类型换成对应的返回类型,还能在任务组里收集所有任务的结果。
2. 手动创建Task实例并等待结果
先分别启动两个独立的Task,再等待它们执行完成:
Task { let task1 = Task { await task1() } let task2 = Task { await task2() } _ = await task1.value _ = await task2.value } func task1() async { } func task2() async { }
这里两个Task会立即并行启动,后续的await只是等待它们完成,不会改变并行执行的本质。
3. 拆分await语句
和你给出的数组await效果完全一致,只是把等待操作拆分开:
Task { async let t1 = task1() async let t2 = task2() await t1 await t2 } func task1() async { } func task2() async { }
async let会提前启动两个异步任务,后续的await只是依次等待结果,任务本身还是并行执行的。
内容的提问来源于stack exchange,提问作者kaulex
相关产品推荐
相关产品推荐

