如何在Swift中通过async/await同时发起多个API调用?
Swift 结构化并发多API并行调用实现方案
你当前的串行await写法会让接口请求按顺序执行,拖慢整体加载速度,用Swift结构化并发提供的两种方案都可以实现多请求并行发起:
方案1:async let(适合固定数量的少量并行任务)
这是你当前场景下最简洁的写法:
// 立刻并行启动两个异步任务,不会阻塞等待结果 async let profileData = viewModel.getProfileData() async let userCardData = viewModel.getCardDetails() // 需要使用结果时再await等待任务执行完成 let (loadedProfile, loadedCard) = await (profileData, userCardData)
注意事项
- 用
async let声明的任务会立刻开始执行,不需要额外调用触发 - 如果接口请求有抛错逻辑,在
await取值时添加try即可,错误会按结构化并发规则正常传播 - 如果需要单独处理某个任务的错误,可以单独对单个
async let变量做try await处理
方案2:TaskGroup(适合动态数量的并行任务)
如果你的并行请求数量不固定(比如需要遍历数组发起多个请求),可以用任务组实现:
// 假设两个接口返回值都是同类型,不同类型可以用枚举包装 let apiResults = await withTaskGroup(of: Any.self) { group in group.addTask { await viewModel.getProfileData() } group.addTask { await viewModel.getCardDetails() } // 支持动态添加任意数量的任务 var results = [Any]() for await result in group { results.append(result) } return results }
内容的提问来源于stack exchange,提问作者Let's_Create
相关产品推荐
相关产品推荐

