Ich habe ein Projekt mit 2 Gruppen von asynchronen Funktionen, die in der Reihenfolge ausgeführt werden sollten. Nachdem alle asynchronen Funktionen ausgeführt wurden, versuche ich function3
auszuführen.Fehler bei der Behandlung einer Reihe von asynchronen Funktionen mit dispatchGroup in Swift
ist hier ein hohes Maß Struktur meines Code:
class VC: UIViewController {
let dispatchGroup = DispatchGroup()
let dispatchGroup2 = DispatchGroup()
override func viewDidLoad() {
asyncFunc1()
dispatchGroup.notify(queue: .main) {
asyncFunc2()
}
dispatchGroup2.notify(queue: .main) {
print("all done")
function3()
}
}
func asyncFunc1() {
for item in itemArray {
dispatchGroup.enter()
Alamofire.request(urlString).responseString { response in
dispatchGroup.leave()
}
}
}
func asyncFunc2() {
for item in itemArray2 {
dispatchGroup2.enter()
Alamofire.request(urlString).responseString { response in
dispatchGroup2.leave()
}
}
}
}
Meine Erwartung ist, dass Funktionen in der Reihenfolge der asyncFunc1() -> asyncFunc2() -> function3()
laufen. Wenn ich diese App tatsächlich ausführen, sehe ich, dass dispatchGroup2.notify
am Anfang ausgelöst wird, wenn Programm ausgeführt wird und nie aufgerufen wird, nachdem asyncFunc2
fertig ist. Was ist hier falsch? Ich habe versucht, mit einer dispatchGroup
Variable anstelle von 2 (dispatchGroup
und dispatchGroup2
) zu tun, aber das hat nicht wieder funktioniert.
Funktioniert wie ein Charme! Vielen Dank, dass Sie auf meinen Fehler hingewiesen und eine neue Antwort vorgeschlagen haben. Ich wünschte, ich könnte das mehrmals wiederholen;) – user7418039