我有 3 个线程从互联网下载数据。
func thread1() {
DispatchQueue.global().async {
// do something from json
}
}
func thread2() {
DispatchQueue.global().async {
// do something from json
}
}
func thread3() {
DispatchQueue.global().async {
// download img
}
}
func finishFunction() {
print("Finish")
}
我想在完成线程 1、2 和 3 后启动 finishFunction 函数。如何实现?
最佳答案
通常,您不会在 sync
/async
调用中包装函数体。最好让函数做它做的事,然后让调用者可以灵活地将他们交给调度,使用他们想要的 QoS,在他们想要的队列上,以及他们想要的任何其他标志。
func doSomethingFromJSON1() {}
func doSomethingFromJSON2() {}
func downloadImage() {}
func doItAll() {
let dispatchGroup = DispatchGroup()
dispatchGroup.enter()
DispatchQueue.global().async {
doSomethingFromJSON1()
dispatchGroup.leave()
}
dispatchGroup.enter()
DispatchQueue.global().async {
doSomethingFromJSON2()
dispatchGroup.leave()
}
dispatchGroup.enter()
DispatchQueue.global().async {
downloadImage()
dispatchGroup.leave()
}
dispatchGroup.notify(queue: .global) {
finishFunction()
}
}
关于ios - Swift 4 中 3 个线程的同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49886930/