1
我製作了DispatchGroup
並運行了2個異步任務。一個在main
上,另一個在global()
上。DispatchGroup無法按預期方式工作
只要我明白,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
如果我做了global()
隊列C
和D
任務運行,它的工作。
所以它不像平常的回調關閉。我想如果我設置了一次,每次在組中完成時都會調用它。謝謝! – Ryan
當隊列中沒有當前任務時(在最後一次對任何當前輸入的任務進行「離開」調用之後)它會被調用。 – rmaddy