DispatchQueue 的行为不像串行队列

DispatchQueue doesn't behave like serial queue

通过使用以下代码,我希望每次调用函数时,执行之间的最短时间为 3-4 秒。

但是:当我连续调用 writeData() 4 次时,我看到异步块在没有等待上一个调用完成的情况下执行。

func writeData(){
    DispatchQueue(label: "be.io").asyncAfter(deadline: .now() + 1) {
        print("START :\(Int64((Date().timeIntervalSince1970 * 1000.0).rounded()))")
        Thread.sleep(forTimeInterval: 3)
    }
}
...
writeData()
writeData()
writeData()
writeData()

预期输出应该是这样的:

START :1611250630000
START :1611250634000
START :1611250638000
START :1611250642000

但是在执行时我得到了所有 4 个调用的相同时间戳(~1 毫秒差异)。

START :1611250630000
START :1611250630000
START :1611250630000
START :1611250630000

我做错了什么?

P.S 我毫不拖延地尝试了 async,没有运气。

DispatchQueue(label: "be.io") 每次调用都会创建一个新实例

To get as you expect make it an instance var like

let mySerialQueue = DispatchQueue(label: "be.io")