在我下面的示例代码中,我会在失败时调用complete(false)
。但是,由于我使用的是DispatchGroup
对象来确保所有异步请求都已完成,因此我不能仅仅调用syncGroup.leave()
,因为将调用notify
,其中包含complete(true)
,因此该函数返回true
,因此应返回false
失败。如何使用DispatchGroup在for循环内进行异步调用
我在没有正确地完成我的功能时没有调用syncGroup.leave()
正确吗?或者我应该打电话syncGroup.leave()
,并以某种方式试图确定结果是什么,所以我可以返回false
失败?
let syncGroup = DispatchGroup()
syncGroup.enter()
for track in unsynced {
register(time: time, withCompletion: { (success: Bool) ->() in
if success {
self.debug.log(tag: "SyncController", content: "Registered")
syncGroup.leave()
}
else {
complete(false)
}
})
}
//all requests complete
syncGroup.notify(queue: .main) {
self.debug.log(tag: "SyncController", content: "Finished registering")
complete(true)
}
因为你分派很多任务,但只返回一个状态你的方法是有缺陷的。你需要考虑你想达到什么;也许你应该准备好接收多个回调函数(可能传递'track'以及true/false结果),或者调用回调函数一次,但传递一系列轨道/状态 – Paulw11