Vic*_*tor 1 dispatch ios swift
我DispatchGroup用来执行任务,但是group.notify在任务完成之前被调用。
我的代码:
let group = DispatchGroup()
let queueImage = DispatchQueue(label: "com.image")
let queueVideo = DispatchQueue(label: "com.video")
queueImage.async(group: group) {
sleep(2)
print("image")
}
queueVideo.async(group: group) {
sleep(3)
print("video")
}
group.notify(queue: .main) {
print("all finished.")
}
Run Code Online (Sandbox Code Playgroud)
日志:
all finish.
image
video
Run Code Online (Sandbox Code Playgroud)
更新: 上面的问题实际上按原样正确运行(如rmaddy所指出!)
万一其他人对DispatchQueue的async(group :)方法行为感到困惑,我将其保存在下面的错误答案中,因为苹果对此的快速文档目前很糟糕。
需要在每次调用async()之前调用组的enter(),然后需要在每个async()块的末尾(但在该块内)调用该组的Leave()。基本上就像refcount一样,当它达到零(没有剩余输入)时,将调用notify块。
let group = DispatchGroup()
let queueImage = DispatchQueue(label: "com.image")
let queueVideo = DispatchQueue(label: "com.video")
group.enter()
queueImage.async(group: group) {
sleep(2)
print("image")
group.leave()
}
group.enter()
queueVideo.async(group: group) {
sleep(3)
print("video")
group.leave()
}
group.notify(queue: .main) {
print("all finished.")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3749 次 |
| 最近记录: |