我试图延迟循环内的特定线程,但我没有得到我想要的行为。我希望 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
关于ios - 循环延迟的同步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45527755/