使用GCD在Swift中创建串行队列的问题

时间:2019-01-21 13:00:39

标签: swift swift3

我已实现了像Bellow这样的串行队列

var serialQueue = DispatchQueue(label: "com.serial.queue")

并像这样使用

serialQueue.sync(execute: {
            DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2.0) {
                print("First Task")

            }
        })



serialQueue.sync(execute: {
                DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1.0) {
                      print("Second Task")
                  }
            })

预期:第一项任务,第二项任务

但它会打印:第二个任务,第一个任务

2 个答案:

答案 0 :(得分:0)

这是因为在DispatchQueue.main.asyncAfter呼叫中,您延迟一秒钟打印“第二个任务”,并延迟2秒钟打印“第一个任务”。 因此,在1秒钟之后,您将获得“第二个任务”,而在另外1秒钟之后,您将获得“第一个任务”。

您可以直接在serialQueue中调用print,或者如果需要在主线程中执行此操作,只需消除延迟即可。

答案 1 :(得分:0)

尝试这个

var time = DispatchTime.now() + 0.2

serialQueue.sync(execute: {
        DispatchQueue.main.asyncAfter(deadline: time) {
            print("First Task")
        }
    })


time = time + 0.1

serialQueue.sync(execute: {
            DispatchQueue.main.asyncAfter(deadline: time) {
                  print("Second Task")
              }
        })