bugfix> ios > 投稿

すべてのバックグラウンドネットワークタスクをキャンセルし、ログアウトプロセスを実行します(Cookie、セッション、ユーザーの詳細をクリアするなど)。 現在、すべてのネットワークコールがキャンセルされるまで待ってから他の操作を行う方法がわかりません。

使用:Alamofire 4.7.2、Swift 3、Xcode 9.3.1、最小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"...
...

残りの呼び出しがキャンセルされる前にログアウトプロセスが成功し、他の非認証の問題が発生する可能性があります。すべてがキャンセルされるのを待ってから、ログアウトプロセスを開始するとよいでしょう。

fallい3秒待機タイマーを追加するという私の代替案以外の考えはありますか?