我已实现了像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")
}
})
预期:第一项任务,第二项任务
但它会打印:第二个任务,第一个任务
答案 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")
}
})