Swift GCD:并发队列不工作?

Swift GCD: concurrent queue not working?

据我了解,在并发队列中,前一个任务不会阻塞后一个任务的执行。那么为什么在下面的代码中只打印了 "hello" 而没有打印一个 "world" 呢?

override func viewDidLoad() {

    super.viewDidLoad()

    let concurrentQueue = DispatchQueue(label: "test", attributes: .concurrent)

    concurrentQueue.async {

        while true{
            print("hello")
            sleep(1)
        }

        while true{
            print("world")
            sleep(1)
        }

    }

}

因为您只将一个工作项目交给了要执行的队列。它永远循环打印 "hello",然后永远循环打印 "world"。显然,它永远不会打印 "world".

如果您希望这两个操作同时发生,那么您需要提交到单独的工作项:

let concurrentQueue = DispatchQueue(label: "test", attributes: .concurrent)

concurrentQueue.async {
    while true {
        print("hello")
        sleep(1)
    }
}

concurrentQueue.async {
    while true {
        print("world")
        sleep(1)
    }
}