[英]iOS: Force to cancel Operation in NSOperationQueue
我需要立即取消NSOperationQueue中的所有操作。
考虑我的情景,
我必须连续点击我的服务器,即只要用户在文本框中键入内容,我就会调用我的服务器。 用户完成输入后,我必须打最后的api调用。 所以我为单个API命中创建了一个NSOperation。 用户在文本框中键入。 我创建了NSOperation对象并在NSOperationQueue中添加它。 在完全检测到用户的输入后,我取消了队列中的所有操作并点击了我的最终api。 问题是某些操作不会立即取消。 因此我的最终api命中不会立即调用。 它等待一段时间(所有操作都必须完成)然后调用。
仅供参考,
myOperationQueue.cancelAllOperations()
在操作启动方法我有这个代码
let session = URLSession.shared
let task = session.dataTask(with: urlRequest, completionHandler: { (data, urlResponse, error) -> Void in
})
task.resume()
请提供最好的方法立即调用我的最终API。
关于cancellAllOperations方法的苹果文档,它清楚地解释了你的情况。
取消操作不会自动将它们从队列中删除或停止当前正在执行的操作。 对于排队和等待执行的操作,队列必须仍然尝试执行操作,然后才能识别它被取消并将其移动到完成状态。 对于已经执行的操作,操作对象本身必须检查取消并停止正在执行的操作,以便它可以移动到完成状态。 在这两种情况下,完成(或取消)操作仍然有机会在从队列中删除之前执行其完成块。
你也必须取消你的任务。
在Operation子类中实现取消覆盖。 此覆盖也会取消该任务。
var task: URLSessionTask?
func scheduleTask() {
let session = URLSession.shared
///Task is an instance variable
task = session.dataTask(with: urlRequest, completionHandler: { (data, urlResponse, error) -> Void in
})
task?.resume()
}
public override func cancel() {
task?.cancel()
super.cancel()
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.