在下面的示例代码中,我在失败时调用complete(false)
。但是,由于我使用DispatchGroup
对象来确保所有异步请求都已完成,因此我无法在失败时调用syncGroup.leave()
,因为notify
将被调用,其中包含{{ 1}},使该函数返回complete(true)
,当它应该返回true
失败时。
我是否因未能正确完成我的功能而未致电false
?或者我应该调用syncGroup.leave()
并以某种方式尝试确定结果是什么,所以我可以在失败时返回syncGroup.leave()
?
false
答案 0 :(得分:3)
您必须在for循环中输入该组。您可能想要引入一个额外的错误标志。
示例实施:
var fail = false
let syncGroup = DispatchGroup()
for track in unsynced {
syncGroup.enter()
register(time: time, withCompletion: { (success: Bool) -> () in
if success {
self.debug.log(tag: "SyncController", content: "Registered")
syncGroup.leave()
}
else {
fail = true
syncGroup.leave()
}
})
}
//all requests complete
syncGroup.notify(queue: .main) {
if fail {
complete(false)
} else {
self.debug.log(tag: "SyncController", content: "Finished registering")
complete(true)
}
}