在 Swift CLI 中使用 GCD
Using GCD in Swift CLI
所以我正在尝试在 CLI 中使用 GCD。为了测试它,我写了一些这样的代码:
import Foundation
var i = 0
print("a: ",i)
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0)) {
for n in 1..<10{
i++
}
print("c: ",i)
dispatch_async(dispatch_get_main_queue()){
print("d: ",i)
}
}
print("b: ",i)
sleep(5)
print("e: ",i)
这个的输出是:
一个:0
乙:0
c: 9
e: 9
几秒钟后打印最后一行。我想知道的是 d 发生了什么?我放在那个块中的任何东西似乎都没有执行。当我在 iOS 中使用它时,它工作正常,只是不在 CLI 中。
CLI 缺少应用程序的持久性。它在 d
有机会被打印之前就结束了(终止)。
正如@user3441734 正确指出的那样,您可以在 CLI 中通过调用 dispatch_main()
作为退出前的最后一件事来解决此问题。这个调用有效地迫使我们现在 进入主队列并在退出之前拉出 main-queued 块并执行它。
所以我正在尝试在 CLI 中使用 GCD。为了测试它,我写了一些这样的代码:
import Foundation
var i = 0
print("a: ",i)
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0)) {
for n in 1..<10{
i++
}
print("c: ",i)
dispatch_async(dispatch_get_main_queue()){
print("d: ",i)
}
}
print("b: ",i)
sleep(5)
print("e: ",i)
这个的输出是: 一个:0 乙:0 c: 9 e: 9
几秒钟后打印最后一行。我想知道的是 d 发生了什么?我放在那个块中的任何东西似乎都没有执行。当我在 iOS 中使用它时,它工作正常,只是不在 CLI 中。
CLI 缺少应用程序的持久性。它在 d
有机会被打印之前就结束了(终止)。
正如@user3441734 正确指出的那样,您可以在 CLI 中通过调用 dispatch_main()
作为退出前的最后一件事来解决此问题。这个调用有效地迫使我们现在 进入主队列并在退出之前拉出 main-queued 块并执行它。