我需要暂停在NSOperationQueue中插入的正在运行的NSOperation。目前我取消所有操作并重新启动它们。但这会导致在完成流程方面出现某种重复。我尝试使用NSOperationQueue的setSuspended标志。但它并没有暂停这项行动。有什么出路吗?
答案 0 :(得分:12)
请参阅:Link
此处来自apple docs:
暂停和恢复队列 如果要暂时停止执行操作,可以使用setSuspended:方法挂起相应的操作队列。
暂停队列不会导致已执行的操作在其任务中间暂停。它只是阻止计划执行新操作。您可以暂停队列以响应用户请求暂停任何正在进行的工作,因为期望用户最终可能希望恢复该工作。
答案 1 :(得分:3)
我没试过这个,但我可能会从这里开始:
isPaused
子类NSOperation
标记
setCancelled:
(请注意-main
中的此更改)-main
-main
返回
请注意,这只是暂停它。如果你真的想暂停并明确恢复,你会想要恢复时手动“新操作”。
现在,如果您正在观察或有特殊的完成,那么您将遇到一些其他问题。对于简单的情况,似乎这种方法似乎工作正常。
答案 2 :(得分:0)
在Swift 5中,您可以使用isSuspended属性暂停和恢复您的 在OperationQueue中,您可以看到示例以进一步了解:-
let operationQueue = OperationQueue()
let op1 = BlockOperation {
print("done")
}
let op2 = BlockOperation {
print("op2")
}
let op3 = BlockOperation {
print("op3")
}
op1.addDependency(op2)
operationQueue.addOperations([op1, op2, op3], waitUntilFinished: false)
operationQueue.isSuspended = true
print("operationQueue suspended")
if operationQueue.isSuspended {
operationQueue.isSuspended = false
print("operationQueue restarted")
}
OutPut:-
op2
op3
operationQueue suspended
operationQueue restarted
done