NSURLSession取消任务 [英] NSURLSession cancel Task

查看:1272
本文介绍了NSURLSession取消任务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用以下配置创建新的NSURLSession

  if(!self.session){
NSURLSessionConfiguration * config = [NSURLSessionConfiguration backgroundSessionConfiguration:[self uniquieIdentifier]];
config.discretionary = NO;
self.session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];
}

然后按下按钮我试图停止所有当前的下载任务。

  [[[self session] delegateQueue] setSuspended:YES]; 
[[self session] invalidateAndCancel];不过我得到的响应委托方法didFinishDownloadingToURL,我很确定没有新的会话或下载任务是在这一点之后创建的。如何停止所有任务的发生?

解决方案

我不建议使用invalidateAndCancel方法导致队列及其标识符保持无效,无法重复使用,直到您重置整个设备。



NSURLSession类参考



我使用此代码取消所有待处理的任务。

   - (void)cancelDownloadFiles 
{

[self.session getTasksWithCompletionHandler: (NSArray * dataTasks,NSArray * uploadTasks,NSArray * downloadTasks){

for(NSURLSessionTask * _task in downloadTasks)
{
[_task cancel];

id< FFDownloadFileProtocol> file = [self getFileDownloadInfoIndexWithTaskIdentifier:_task.taskIdentifier];

[file.downloadTask cancel];

//更改所有相关属性。
file.isDownloading = NO;
file.taskIdentifier = -1;
file.downloadProgress = 0.0;

}

}];

cancel = YES;
}


I create new NSURLSession with following configs

 if (!self.session) {
            NSURLSessionConfiguration *config = [NSURLSessionConfiguration backgroundSessionConfiguration:[self uniquieIdentifier]];
            config.discretionary = NO;
            self.session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];
        }

and on after pressing a button I am trying to stop all current download tasks.

[[[self session] delegateQueue] setSuspended:YES];
[[self session] invalidateAndCancel];

Nevertheless I get responses in delegate method didFinishDownloadingToURL, and I am pretty sure that no new sessions or download task are created after this point. How to stop all task from happening?

解决方案

I do not reccommend to use invalidateAndCancel method cause the queue and its identifier keeps invalidated and cannot be reused untill you reset the whole device.

NSURLSession class reference

I use this code to cancel all pending tasks.

- (void) cancelDownloadFiles
{

    [self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) {

        for (NSURLSessionTask *_task in downloadTasks)
        {
            [_task cancel];

            id<FFDownloadFileProtocol> file = [self getFileDownloadInfoIndexWithTaskIdentifier:_task.taskIdentifier];

            [file.downloadTask cancel];

            // Change all related properties.
            file.isDownloading = NO;
            file.taskIdentifier = -1;
            file.downloadProgress = 0.0;

        }

    }];

    cancel = YES;
}

这篇关于NSURLSession取消任务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆