2017-08-06 6 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

それは感謝を作品! –

関連する問題