记得有一年有个面试官问过一个问题:
如何实现以下功能首先完成task1,task2,这两个任务互不相干,但两个任务完成之后要通知task3去干活,然后渲染UI?
要完成这个操作是肯定需要队列组的
let group = DispatchGroup()
let task1 = DispatchWorkItem {
for i in 0..<10
{
print("task1----\(i)")
}
}
let task2 = DispatchWorkItem {
for i in 0..<10
{
print("task2----\(i)")
}
}
let task3 = DispatchWorkItem {
print("task3")
DispatchQueue.main.async {
print("渲染UI")
}
}
DispatchQueue.global().async(group: group, execute: task1)
DispatchQueue.global().async(group: group, execute: task2)
group.notify(queue: DispatchQueue.global()) {
DispatchQueue.global().async(group: group, execute: task3)
}
print("主线程")
代码如上主线程该干嘛干嘛,task1,task2该干嘛干嘛,然后做完了通知task3,然后渲染UI,也可以自定义一个并发队列,然后把队列分开,但只是演示,全局并发队列也够了