Как отменить все запросы в общем менеджере Alamofire

Как отменить все запросы в общем менеджере Alamofire?

Это моя функция:

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])
    }
}

Может ли это работать?


person Eric Chen    schedule 15.12.2014    source источник


Ответы (3)


Используйте метод invalidateAndCancel NSURLSession:

manager.session.invalidateAndCancel
person mattt    schedule 15.12.2014
comment
Извините, я не думаю, что это работает. В документе API говорится, что finishTasksAndInvalidate и invalidateAndCancel не оказывают никакого влияния на синглтон общего сеанса. - person Eric Chen; 16.12.2014
comment
Итак, создайте свой собственный менеджер, который создает новый сеанс. - person mattt; 16.12.2014
comment
После вызова этого я не могу снова сделать запрос - person Janak Thakkar; 21.12.2015
comment
как воссоздать сеанс после этого? - person Janak Thakkar; 29.12.2015

Это для Swift 4.0 и Alamofire версии 4.5.

Alamofire.SessionManager.default.session.getAllTasks{ $0.forEach{ $0.cancel() } }
person r_19    schedule 16.10.2017

Для Alamofire версии 5.0+ SessionManager был заменен на Session. Просто используйте

Session.default.cancelAllRequests()

чтобы отменить все текущие запросы, созданные AF.request().

person heiko    schedule 11.03.2021