DispatchQueue 的行为不像串行队列

Vit*_*y A 1 grand-central-dispatch ios swift dispatch-queue

通过使用以下代码,我期望每次调用 func 时,执行之间的最短时间为 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()
Run Code Online (Sandbox Code Playgroud)

预期的输出应该是这样的:

START :1611250630000
START :1611250634000
START :1611250638000
START :1611250642000
Run Code Online (Sandbox Code Playgroud)

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

START :1611250630000
START :1611250630000
START :1611250630000
START :1611250630000
Run Code Online (Sandbox Code Playgroud)

我在做什么错?

PS我毫不拖延地尝试了异步,没有运气。

Sh_*_*han 5

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

为了达到你的预期,让它成为一个实例变量

let mySerialQueue = DispatchQueue(label: "be.io") 
Run Code Online (Sandbox Code Playgroud)