将问题与循环中的延迟同步
我试图延迟循环中的特定线程,我没有得到我想要的行为。 我希望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
您在同一个线程中运行代码。 你需要在另一个线程中运行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