Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSURLSession cancel Task

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?

like image 735
Arthur A. Avatar asked Dec 02 '22 17:12

Arthur A.


2 Answers

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;
}
like image 123
Rotten Avatar answered Dec 26 '22 14:12

Rotten


That is the expected behaviour, when you cancel tasks on a session they might still call the delegate method.

Have you check the state of the given task? It should be NSURLSessionTaskStateCanceling.

like image 23
fbernardo Avatar answered Dec 26 '22 13:12

fbernardo