在Swift 4中同步3个线程

Łuk*_*tta 0 grand-central-dispatch ios swift

我有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")
}
Run Code Online (Sandbox Code Playgroud)

我想在完成线程1,2和3后启动finishFunction函数.如何做到这一点?

Ale*_*ica 8

通常,您不会将函数体包装在sync/ asynccalls中.最好让函数执行它所做的事情,然后让调用者可以灵活地将它们分配给他们想要的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()
    }
}
Run Code Online (Sandbox Code Playgroud)