dispatch.async() 只运行 1 行代码

dispatch.async() only runs 1 line of code

我无法理解 dispatch.async。我有以下代码:

dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_UTILITY.rawValue), 0)) {
    print("hello")
    print("world")
    dispatch_async(dispatch_get_main_queue()) {
        print("done")
    }
}

然而它唯一打印出来的是:

hello

无论我做什么,都只执行第一行。如果我用函数替换它,像这样:

func printHelloWorld(){
    print("hello")
    print("world")
}

dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_UTILITY.rawValue), 0)) {
    printHelloWorld()
    dispatch_async(dispatch_get_main_queue()) {
        print("done")
    }
}

同样的事情发生了。函数被调用,但是可执行代码的第一行只有运行。此外,线程完成时要调用的闭包根本没有被调用。

如能帮助理解如何使用 dispatch.async,我们将不胜感激。

Playgrounds 在主线程完成后停止执行运行 顶级代码。如果你是 运行 异步代码,你可以使用这行代码来保持 playground 运行:

XCPlaygroundPage.currentPage.needsIndefiniteExecution = true

然后在完成后使用这行代码:

XCPlaygroundPage.currentPage.finishExecution()