我正在尝试延迟循环中的特定线程,但我没有得到我想要的行为。我希望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
答案 0 :(得分: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