【发布时间】:2018-11-26 23:24:25
【问题描述】:
我有这段代码可以将NSOperation 实例添加到队列中
let operation = NSBlockOperation()
operation.addExecutionBlock({
self.asyncMethod() { (result, error) in
if operation.cancelled {
return
}
// etc
}
})
operationQueue.addOperation(operation)
当用户离开触发上述代码的视图时,我取消操作
operationQueue.cancelAllOperations()
在测试取消时,我 100% 确定取消在异步方法返回之前执行,所以我希望 operation.cancelled 为真。不幸的是,这没有发生,我无法理解为什么
我正在对 viewWillDisappear 执行取消操作
编辑
asyncMethod 包含在不同线程中运行的网络操作。这就是回调存在的原因:处理网络操作返回。网络操作在类层次结构的深处执行,但我想在根级别处理 NSOperations。
【问题讨论】:
-
你必须确定,在测试之前 operation.cancelled 是真的,而不仅仅是在异步方法返回之前......
-
@user3441734:“测试前”是什么意思?在异步方法启动之前取消操作是不可能的,因为没有逻辑。如果之前取消,它根本不会运行。
-
"我 100% 确定取消在异步方法返回之前执行,所以我希望 operation.cancelled 为真"。 async 方法将返回,即使 operation.cancelled 为 false。它只是不'早'返回。
-
@user3441734:对不起,我不明白你的意思。我不希望异步方法提前返回。我只是想避免通过
operation.cancelledcheck 执行回调逻辑。 -
避免执行?这是您的责任....为此,您测试 operation.cancelled 是真还是假,不是吗?背后没有奇迹,如果 operation.cancelled 是真的,不要继续工作(你可以一次又一次地测试它......在你的代码中的任何地方,并从工作中返回(完成它)'早'
标签: swift nsoperation