将问题与循环中的延迟同步

时间:2017-08-06 01:14:32

标签: ios swift synchronization

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

答案 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