[英]Swift wait for closures to finish
我有異步任務的問題。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
self.loadRemote {
log.debug("completed remote data")
}
self.loadLocal {
log.debug("completed local data")
}
self.loadAdmin {
log.debug("completed admin data")
}
dispatch_async(dispatch_get_main_queue()) {
log.debug("called completed data")
completed()
}
}
以下代碼無法正常工作。 它按以下順序調用:
completed local data
called completed data
completed remote data
這不是我所期望的。 您可以想象我想要訂單:“本地”,“遠程”,最后“稱為已完成”。
謝謝!
這就是Dispatch Groups的用途。 你在開始之前叫“輸入”,在你完成之后“離開”。 然后,您可以添加通知,該通知是在所有操作完成后排隊的塊。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
let group = dispatch_group_create()
dispatch_group_enter(group)
self.loadRemote {
log.debug("completed remote data")
dispatch_group_leave(group)
}
dispatch_group_enter(group)
self.loadLocal {
log.debug("completed local data")
dispatch_group_leave(group)
}
dispatch_group_enter(group)
self.loadAdmin {
log.debug("completed admin data")
dispatch_group_leave(group)
}
dispatch_group_notify(group, dispatch_get_main_queue()) {
log.debug("called completed data")
completed()
}
}
鑒於所有的load...
方法似乎都是異步的,這里似乎沒有任何原因可以用於初始dispatch_async
(但是它們可能比當前隊列更耗時)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.