operation.cancel()不取消当前操作

时间:2017-02-21 11:51:15

标签: swift nsoperation nsoperationqueue

使用operation.cancel()不会取消当前操作。如果队列中有操作,它似乎取消它,但如果它正在执行,那么它似乎不会停止它。

我是否需要将某些内容发送回我的子类操作中的main()函数以使其停止?

for operation in downloadQueue.operations {
    if operation.name == opName {
        if operation.isExecuting == true {
           operation.cancel()
        }
    }
}

1 个答案:

答案 0 :(得分:6)

请参阅以下文档:https://developer.apple.com/reference/foundation/operationqueue

  

取消操作对象会将对象留在队列中,但会通知对象它应该尽快中止其任务。对于当前正在执行的操作,这意味着操作对象的工作代码必须检查取消状态,停止它正在执行的操作,并将自己标记为已完成。

基本上,您的操作代码应检查isCancelled并在需要时停止。例如,您可能有一个循环处理数据项,您可以在处理每个项目之前检查isCancelled。