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;
}
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With