Отмените все события сети Alamofire, затем новый запрос - PullRequest
0 голосов
/ 25 мая 2018

Я бы хотел отменить все мои фоновые сетевые задачи, ТО затем выполнить процесс выхода из системы (очистить файлы cookie, сеанс, данные пользователя и т. Д.).В настоящее время я не уверен, как дождаться отмены всех сетевых вызовов, прежде чем делать что-то еще.

Использование: Alamofire 4.7.2, Swift 3, Xcode 9.3.1, Min iOS 9 +

Текущий код:

Alamofire.SessionManager.default.session.getAllTasks { (tasks) in
    print("tasks to cancel: \(tasks.count)")
    // cancel all network tasks
    tasks.forEach {
        $0.cancel()
        print("canceling network task")
    }

    // ToDo need to wait for all tasks to be canceled first
    doLogout()
}

Как и ожидалось, журналы читаются

tasks to cancel: 5
canceling network task
canceling network task
canceling network task
canceling network task
canceling network task
do logout
Making request Logout
POST : https://.../logout
GET :  https://... back  with error:  Error Domain=NSURLErrorDomain Code=-999 "cancelled"...
GET :  https://... back  with error:  Error Domain=NSURLErrorDomain Code=-999 "cancelled"...
GET :  https://... back  with error:  Error Domain=NSURLErrorDomain Code=-999 "cancelled"...
GET :  https://... back  with error:  Error Domain=NSURLErrorDomain Code=-999 "cancelled"...
GET :  https://... back  with error:  Error Domain=NSURLErrorDomain Code=-999 "cancelled"...
...

Существует вероятность того, что мой процесс выхода из системы завершится успешно до того, как оставшиеся вызовы будут отменены, и может вызвать другие неавтоматические проблемы.Было бы здорово подождать, пока все будут отменены, а затем начать процесс выхода из системы.

Есть какие-либо мысли, кроме моей альтернативной идеи о добавлении уродливого таймера ожидания 3 сек? *

1 Ответ

0 голосов
/ 25 мая 2018

Я использовал это в своем коде, и он отлично работает:

afManager.session.getAllTasks { (tasks) in
        print(tasks)
        tasks.forEach{ $0.cancel() }
    }

afManager - мой менеджер сеансов Alamofire.

...