Swift withThrowingTaskGroup出现try表达式无抛出函数调用警告问题
警告触发原因
withThrowingTaskGroup 不会自动捕获子任务的错误向外抛出,你仅向任务组中添加了会抛出错误的子任务,但没有在闭包内执行任何可抛出错误的操作(比如等待子任务执行、获取子任务返回值),因此整个闭包没有抛出错误的可能,开头的try关键字也就没有作用,触发警告。
错误向外传播的实现方式
你需要在任务组闭包内主动等待子任务执行,只要子任务抛出错误,等待操作就会触发错误抛出,进而传递给f1的调用方。常见的等待操作有两种:
- 调用
group.waitForAll():等待所有子任务执行完成,任意子任务抛出错误都会直接向上抛出 - 遍历
group调用next()获取每个子任务的返回值,取值过程中子任务的错误会被抛出
修正后代码示例
func f1() async throws { try await withThrowingTaskGroup(of: Int.self) { group in group.addTask(priority: .high) { throw NSError(domain: "custom", code: -1) } // 新增等待所有任务执行的逻辑,该调用可抛出错误,外层try生效 try group.waitForAll() } }
内容的提问来源于stack exchange,提问作者user1046037
相关产品推荐
相关产品推荐

