取消所有Alamofire网络事件然后新请求

时间:2018-05-25 03:55:10

标签: ios swift alamofire

我想取消所有后台网络任务然后执行注销过程(清除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 :(得分:0)

我在我的代码中使用了它,它运行正常:

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

afManager是我的Alamofire会话管理员。