我在理解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
的帮助。
答案 0 :(得分:3)
一旦主线程完成运行顶级代码,Playgrounds就会停止执行。如果您正在运行异步代码,则可以使用以下代码行来保持游乐场的运行:
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
然后在完成后使用这行代码:
XCPlaygroundPage.currentPage.finishExecution()