取消所有操作+ AFNetworking 3.0

我创build了一个从AFURLSessionManagerinheritance的类HTTPServiceProvider。 添加下面的代码来获取数据。

let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() let manager = AFURLSessionManager(sessionConfiguration: configuration) let dataTask = manager.dataTaskWithRequest(request) { (response, responseObject, error) in //Perform some task } dataTask.resume() 

我想添加dataTask到AFURLSesstionManger提供的operationQueue,并在再次调用相同的请求之前取消其他一些类(BaseController.swift)中的所有操作。

试过这个代码,但不工作

 self.operationQueue.addOperationWithBlock{ //Added above code } 

而在BaseController.swift文件里面,叫做 –

 HTTPServiceProvide.sharedInstance.operationQueue.cancelAllOperations 

但它不工作:(

谢谢。

用NSURLSession取消所有的dataTasks:

 manager.session.getTasksWithCompletionHandler { (dataTasks, uploadTasks, downloadTasks) in dataTasks.forEach { $0.cancel() } } 

对我来说,取消所有请求的最好方法是:

 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //manager should be instance which you are using across application [manager.session invalidateAndCancel]; 

这种方法有一个很大的优势:所有正在执行的请求都会调用失败块。 我的意思是这个例子:

  [manager GET:url parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) { code } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { code } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { //this section will be executed }]; 

2件事你需要知道:

  • 它将取消仅使用AFHTTPSessionManager的这个确切实例执行的请求,该实例将用于invalidateAndCancel
  • 在取消所有的请求之后,你必须初始化AFHTTPSessionManager的新实例 – 当你试图用旧的请求时,你会得到exception

我创build了一个任务数组。
var tasks = [URLSessionDataTask]()
然后在创build新的http请求之前添加所有我想要取消的dataTask
tasks.append(dataTask)

取消所有的操作,我用了
func cancelPreviousRequest(){ for task in tasks (task as URLSessionTask).cancel() } tasks.removeAll() }