在我下面的示例代碼中,我會在失敗時調用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