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")
通过使用以下代码,我希望每次调用函数时,执行之间的最短时间为 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")