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?

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;
}

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.


Need Your Help

How to call the constructor with call_user_func_array in PHP

php constructor

How could I call the constructor of a class with call_user_func_array

Best way to for C++ types to self register in a list?

c++

Suppose I have some per-class data: (AandB.h)