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

时间:2016-01-12 04:10:59

标签: swift asynchronous grand-central-dispatch

我在理解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的帮助。

1 个答案:

答案 0 :(得分:3)

一旦主线程完成运行顶级代码,Playgrounds就会停止执行。如果您正在运行异步代码,则可以使用以下代码行来保持游乐场的运行:

XCPlaygroundPage.currentPage.needsIndefiniteExecution = true

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

XCPlaygroundPage.currentPage.finishExecution()