pet*_*itz 3 closures asynchronous function swift
我有异步任务的问题.
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()
}
}
Run Code Online (Sandbox Code Playgroud)
以下代码无法正常工作.它按以下顺序调用:
completed local data
called completed data
completed remote data
Run Code Online (Sandbox Code Playgroud)
这不是我所期望的.您可以想象我想要订单:"本地","远程",最后"称为已完成".
谢谢!
这就是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()
}
}
Run Code Online (Sandbox Code Playgroud)
鉴于所有load...方法看起来都是异步的,这里的初始化似乎没有任何理由dispatch_async(但是它们可能在当前队列上比它们出现时更耗时).
| 归档时间: |
|
| 查看次数: |
2189 次 |
| 最近记录: |