创建了自定义调度队列,并将两个任务提交到同一队列,第一个任务为sleep(3(,第二个任务为睡眠(1(。那么为什么第一个任务首先完成执行呢?
let queue = DispatchQueue(label: "name");
queue.async {
Thread.sleep(forTimeInterval: 3)
print("Task1 done")
}
queue.async {
Thread.sleep(forTimeInterval: 1)
print("Task2 done")
}
为了让它们以concurrent
的方式执行,您必须使用attributes: .concurrent
,如下所示。
let queue = DispatchQueue(label: "name", attributes: .concurrent);
queue.async {
Thread.sleep(forTimeInterval: 3)
print("Task1 done")
}
queue.async {
Thread.sleep(forTimeInterval: 1)
print("Task2 done")
}
如果省略了该部分,那么调度队列将串行执行任务。这就是你正在经历的。
请查看此处的文档。
要与队列关联的属性。包括concurrent属性以创建并发执行任务的调度队列。如果省略该属性,那么调度队列将串行执行任务。