I have a simple task with threads, but what seems to help everyone else, doesn’t work for me and I don’t understand why.
This is my button processing:
AnyButton(action: {
if isPhoneMode {
print("starting long running tasks")
let group = DispatchGroup()
group.enter()
DispatchQueue.global().async {
urlService.loginRequest(login: "+\(countryCode)\(phoneNumber)", password: password, completion: {
print("print in complition")
})
print("long task done!")
group.leave()
}
group.notify(queue: DispatchQueue.global()) {
print("all tasks done!")
}
}
This is loginRequest
:
func loginRequest(login: String, password: String, completion: @escaping () -> Void) {
let parameters: Parameters = [
"language": "EN",
"password": password,
"username": login
]
let url = "someURL"
let authRequest = AF.request(url,
method: .post,
parameters: parameters,
encoding: JSONEncoding.default)
authRequest.responseString { response in
switch response.result {
case .success(let value):
let responseArr = value.components(separatedBy: "\u{0022}")
if responseArr[11] == "ACTIVE" {
self.loginStatus = .correctLogin
print("correct login!")
}
case .failure(let error):
print("Error: \(String(describing: error))")
self.loginStatus = .requestFail
}
}
completion()
}
group.notify
can't track correctly my request. Correct login always last in console: Why so?
starting long running tasks
print in complition
long task done!
all tasks done!
correct login!
I want it to be before “long task done”. How can i do this?