使用operation.cancel()不会取消当前操作。如果队列中有操作,它似乎取消它,但如果它正在执行,那么它似乎不会停止它。
我是否需要将某些内容发送回我的子类操作中的main()函数以使其停止?
for operation in downloadQueue.operations {
if operation.name == opName {
if operation.isExecuting == true {
operation.cancel()
}
}
}
答案 0 :(得分:6)
请参阅以下文档:https://developer.apple.com/reference/foundation/operationqueue
取消操作对象会将对象留在队列中,但会通知对象它应该尽快中止其任务。对于当前正在执行的操作,这意味着操作对象的工作代码必须检查取消状态,停止它正在执行的操作,并将自己标记为已完成。
基本上,您的操作代码应检查isCancelled并在需要时停止。例如,您可能有一个循环处理数据项,您可以在处理每个项目之前检查isCancelled。