NSOperationQueue 中第一个低优先级操作的顺序无效

问题描述

真奇怪,为什么把暂停状态改为false后第一个操作的位置没有变化。

    let operationQueue = OperationQueue.main

    let operation1 = BlockOperation { print("1") }
    operation1.queuePriority = .low

    let operation2 = BlockOperation { print("2") }
    operation2.queuePriority = .normal

    let operation3 = BlockOperation { print("3") }
    operation3.queuePriority = .high

    let operation4 = BlockOperation { print("4") }
    operation4.queuePriority = .veryHigh

    operationQueue.isSuspended = true
    operationQueue.addOperation(operation1)
    operationQueue.addOperation(operation2)
    operationQueue.addOperation(operation3)
    operationQueue.addOperation(operation4)
    operationQueue.isSuspended = false

打印输出:

1
4
3
2

预期的打印输出:

4
3
2
1

UPD 仅针对 OperationQueue.main 注意到此行为。对于带有 OperationQueue() 的自定义 maxConcurrentOperationCount = 1,按预期工作。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)