2017-08-06 29 views
2

我想延遲循環內的特定線程,我沒有得到我想要的行爲。我希望1B只運行一次1A已完成,而2A在單獨的線程上並行運行。我的實施運行1A,然後1B,然後運行2A。任何想法如何我可以解決這個問題?同步問題與循環中的延遲

實施

override func viewDidLoad() { 
    super.viewDidLoad() 

    // 1 
    DispatchQueue.main.async { 
     self.loopManager(printable: "1A") // 1A 
     self.loopManager(printable: "1B") // 1B 
    } 

    // 2 
    DispatchQueue.main.async { 
     self.loopManager(printable: "2A") // 2A 
    } 
} 

func loopManager(printable: String) { 
    for i in 0...3 { 
     doABC(printable: String(i) + ", " + printable) 
     sleep(1) 
    } 
} 

func doABC(printable: String) { 
    print(printable) 
} 

日誌

0, 1A 
1, 1A 
2, 1A 
3, 1A 
0, 1B 
1, 1B 
2, 1B 
3, 1B 
0, 2A 
1, 2A 
2, 2A 
3, 2A 

回答

1

您在同一個線程中運行你的代碼。您需要在另一個線程中運行2A

DispatchQueue.global().async { 
    self.loopManager(printable: "2A") // 2A 
} 

輸出樣本:

0, 1A 
0, 2A 
1, 2A 
1, 1A 
2, 1A 
2, 2A 
3, 1A 
3, 2A 
0, 1B 
1, 1B 
2, 1B 
3, 1B 
+1

它工作的感謝! –