In my project there are 4 web services running in the background. I would like to stop all these services on logout from the current state without waiting for response. I have found this code for doing that
Alamofire.Manager.sharedInstance.session.invalidateAndCancel()
But after calling this, I am not able to make service calls again. Is there any way I can cancel all the running requests?
Here's my service calling code
func getAllCount(parameters: [String: AnyObject],completion: (success : Bool) -> Void) {
PKHUD.sharedHUD.contentView = PKHUDTextView(text: "Loading...")
PKHUD.sharedHUD.show()
request = Alamofire.request(.POST, GlobalConstants.KGetAllCount, parameters: parameters, encoding:.JSON).responseJSON
{
response in switch response.result {
case .Success(let JSON):
PKHUD.sharedHUD.hide()
print("Success with JSON: \(JSON)")
let status : NSString = JSON.valueForKey("status") as! String
if(status .isEqualToString("1")){
MyViewState.QJoined = JSON.valueForKeyPath("data.TotalJoinQueue") as! String
MyViewState.Qstarted = JSON.valueForKeyPath("data.TotalCreatedQueue") as! String
MyViewState.Bumps = JSON.valueForKeyPath("data.TotalBump") as! String
completion(success: true)
break
}else{
completion(success: false)
Helper.globalAlert(JSON.valueForKey("data") as! String)
break
}
case .Failure(let error):
PKHUD.sharedHUD.hide()
print("Request failed with error: \(error)")
completion(success: false)
break
}
}
}
Alamofire is a networking library written in Swift. You use it to make HTTP(S) requests on iOS, macOS and other Apple platforms. For example, to post data to a web-based REST API or to download an image from a webserver. Alamofire has a convenient API built on top of URLSession (“URL Loading System”).
Advantages of Using AlamofireUsing Alamofire will give a cleaner project. API call interactions (POST/GET/PUT/etc.) will be easier and more understable. Alamofire simplifies a number of common networking tasks that makes development faster and easier.
You can explicitly cancel a task by calling its cancel() method. Any task can check Task.
Networking in Alamofire is done asynchronously.
As far as I can tell there is no obvious/easy way to recreate the session. The suggested way to handle this problem is to keep and array of requests static var requests = [Alamofire.Request?]()
then when you want to stop all the requests you can call use request.cancel()
. Using this approach you will have to append each request after creating it.
class func stopAllRequests(){
for request in MyClass.requests{
if let request = request{
request.cancel()
}
}
}
Similar Issue
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With