1

所以我想在CLI中使用GCD。來測試它我寫像這樣的代碼:斯威夫特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 B:0 C:9 E:9

與最後一行打印幾秒鐘後。我想知道的是在d發生了什麼?我放入該塊的任何內容似乎都不會執行。當我在iOS中使用它時,這很好,只是不在CLI中。

+1

之前打印終止執行(「d」,i)的機會來執行。添加到末尾代碼dispatch_main()中斷執行使用CMD-C – user3441734

回答

1

的CLI缺少應用程序的持久性。在d有機會被打印之前,它已經結束(終止)。

正如@ user3441734正確地指出,你可以通過調用dispatch_main()作爲退出前的最後一件事解決此在CLI。這個調用有效地迫使我們進入主隊列現在並退出主隊列塊並執行它,然後退出。

+0

dispatch_main()就是答案(此執行提交給主隊列塊) – user3441734

+0

你說得對。這個調用有效地強制'main()'進入主隊列_right now_,並在退出之前取出排隊的塊並執行它。你(或@ user3441734)應該給出這個答案(如果是你的話,在幾天內你可以接受它):我肯定會贊成它! – matt

+0

請更新您的答案。我在沒有任何東西(沒有電,我的電池會在幾分鐘內死亡..),如果它可以幫助某人,那很好... – user3441734