DispatchGroup 未按预期工作
DispatchGroup doesn't work as expected
我做了 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
如果我在 global()
队列上创建了 C
和 D
任务 运行,它就成功了。
您将对 notify
的调用放在了错误的位置并且调用得太早了。
很可能您想在 run
方法结束时调用 notify
。
init() {
}
func run() {
doC()
doD()
group.notify(queue: .main) {
print("group done")
}
}
请注意 notify
方法的文档中的内容:
Schedules a work item to be submitted to a queue when a group of previously submitted block objects have completed.
粗体是我的
我做了 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
如果我在 global()
队列上创建了 C
和 D
任务 运行,它就成功了。
您将对 notify
的调用放在了错误的位置并且调用得太早了。
很可能您想在 run
方法结束时调用 notify
。
init() {
}
func run() {
doC()
doD()
group.notify(queue: .main) {
print("group done")
}
}
请注意 notify
方法的文档中的内容:
Schedules a work item to be submitted to a queue when a group of previously submitted block objects have completed.
粗体是我的