gpt4 book ai didi

ios - DispatchGroup 未按预期工作

转载 作者:搜寻专家 更新时间:2023-11-01 06:32:10 24 4
gpt4 key购买 nike

我创建了一个 DispatchGroup 并运行了 2 个异步任务。一个在 main 上,另一个在 global() 上。

据我所知,DispatchGroup.notify 的 block 应该在所有任务完成后调用,但它并不像我想的那样工作。

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

如果我让 CD 任务在 global() 队列上运行,它就成功了。

最佳答案

您将对 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.

粗体是我的。

关于ios - DispatchGroup 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45680872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com