我做了一个DispatchGroup
并运行2个异步任务。一个打开main
,另一个打开global()
。
据我了解,DispatchGroup.notify
一旦完成所有任务,就应该调用块,但它不会像我想的那样工作。
class Que {
let group = DispatchGroup()
init() {
group.notify(queue: .main) {
print("group done")
}
}
func run() {
doC()
doD()
}
fileprivate func doC() {
group.enter()
DispatchQueue.main.async(group: group) {
var rst = 0
for idx in 0 ..< 500 {
rst += idx
}
print("work item c is done")
self.group.leave()
}
}
fileprivate func doD() {
group.enter()
DispatchQueue.global().async(group: group) {
var rst = 0
for idx in 0 ..< 50 {
rst += idx
}
print("work item d is done")
self.group.leave()
}
}
}
结果是
work item d is done
group done
work item c is done
我想知道为什么不是
work item d is done
work item c is done
group done
如果我做了C
和D
任务运行global()
队列,它的工作。
您将呼叫打到notify
错误的地方,并且打得太早了。
您很可能希望notify
在run
方法末尾调用。
init() {
}
func run() {
doC()
doD()
group.notify(queue: .main) {
print("group done")
}
}
请注意该notify
方法的文档中所说的内容:
安排一组先前提交的块对象完成后将要提交给队列的工作项目。
大胆是我的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句