4

How to cancel all requests in Alamofire's shared manager?

This is my function:

class func cancelAllRequests() {
    Alamofire.Manager.sharedInstance.session.getTasksWithCompletionHandler { (dataTasks, uploadTasks, downloadTasks) in
        self.each(dataTasks, function: self.cancel)
        self.each(uploadTasks, function: self.cancel)
        self.each(downloadTasks, function: self.cancel)
    }
}

class func cancel(index: Int, element: AnyObject) {
    if let task = element as? NSURLSessionTask {
        task.cancel()
    }
}

class func each<T>(array: [T], function: (Int, T) -> ()) {
    for (index, t) in enumerate(array) {
        function(index, array[index])
    }
}

Can it works?

Eric Chen
  • 103
  • 1
  • 4

3 Answers3

2

Use NSURLSession's invalidateAndCancel method:

manager.session.invalidateAndCancel
mattt
  • 19,544
  • 7
  • 73
  • 84
0

This is for Swift 4.0 and Alamofire Version 4.5

Alamofire.SessionManager.default.session.getAllTasks{ $0.forEach{ $0.cancel() } }
r_19
  • 1,858
  • 1
  • 20
  • 16
0

For Alamofire version 5.0+, SessionManager has been replaced by Session. Just use

Session.default.cancelAllRequests()

to cancel all currently running requests created by AF.request().

heiko
  • 422
  • 7
  • 7