在 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 块并执行它。