我想取消所有后台网络任务然后执行注销过程(清除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秒等待计时器的后备想法之外的任何想法?
答案 0 :(得分:0)
我在我的代码中使用了它,它运行正常:
afManager.session.getAllTasks { (tasks) in
print(tasks)
tasks.forEach{ $0.cancel() }
}
afManager是我的Alamofire会话管理员。