我像波纹管一样实现了串行队列

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")
                  }
            })


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

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

最佳答案

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

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

10-08 05:53