我需要暂停一个插入到 NSOperationQueue 中的正在运行的 NSOperation。目前我正在取消所有操作并重新启动它们。但这会导致在完成的过程方面出现某种重复。我尝试使用 NSOperationQueue 的 setSuspended 标志。但这并没有暂停操作。有什么出路吗?
问问题
16933 次
3 回答
3
我没有尝试过,但我可能会从这里开始:
- 为您的子类添加
isPaused
标志NSOperation
- 实现操作数据的复制/移动方法
- 如果暂停,
setCancelled:
(注意这个变化-main
) - 创建一个新操作,将状态从暂停操作移动到新操作
- 调整优先级以重新排序队列中的操作顺序,如果你喜欢
- 将克隆添加到队列中
- 从
-main
如果在返回-main
请注意,这只会暂停它。如果您真的想暂停并明确恢复,您可以在要恢复时手动“新操作”。
现在,如果您正在观察或有特殊的完成,那么您将遇到一些其他问题。对于简单的情况,这种方法似乎可以正常工作。
于 2012-08-16T10:03:49.627 回答
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
于 2020-07-16T07:52:49.247 回答