我正在尝试探索Operation的queuePriority。我有三个操作对象,它们的queuePriority很高,很高和正常。但是我得到了意外的输出,在日志中我可以看到具有queuePriority的Operation对象很高,而并非总是先执行。请帮忙。
let operationQueue = OperationQueue()
let op1 = BlockOperation()
let op2 = BlockOperation()
let op0 = BlockOperation()
op0.completionBlock = {
print("op0 completionBlock")
}
op0.addExecutionBlock {
print("op0 executionBlock #1")
}
op0.addExecutionBlock {
print("op0 executionBlock #2")
}
op0.queuePriority = .veryHigh
op1.completionBlock = {
print("op1 completionBlock")
}
op1.addExecutionBlock {
print("op1 executionBlock")
}
op1.queuePriority = .high
op2.completionBlock = {
print("op2 completionBlock")
}
op2.addExecutionBlock {
print("op2 executionBlock")
}
op2.queuePriority = .normal
operationQueue.addOperations([op2, op1, op0], waitUntilFinished: true)
输出: op1执行块 op0执行块#1 op0执行块#2 op2执行块 op1完成块 op0完成块 op2 completeBlock
答案 0 :(得分:0)
如果要这种行为,则应在操作之间添加依赖项。 queuePriorites不保证执行顺序。系统尝试先执行优先级高的任务,再执行优先级低的任务,但这取决于多种因素,因此无法保证。您应该实现如下所示的依赖关系;
op2.addDependency(op1)
op1.addDependency(op0)
op2将等待op1,而op1将等待op0。因此,顺序为op0-> op1-> op2