Middle+
Was passiert, wenn im AppDelegate im Hauptthread 'dispatchQueue.main.sync' aufgerufen wird?
sobes.tech KI
Antwort von AI
Es kommt zu einem Deadlock (wechselseitige Blockierung).
Erklärung:
AppDelegateläuft im Haupt-Thread.dispatchQueue.main.syncversucht, Code im Haupt-Thread synchron auszuführen, d.h. wartet auf Abschluss des Codeblocks.- Aber der Haupt-Thread ist bereits mit der Ausführung von
AppDelegatebeschäftigt und wartet, bis der Block insyncbeendet ist. - Der Block in
synckann nicht starten, weil der Haupt-Thread mit Warten beschäftigt ist.
Kurz gesagt, der Haupt-Thread wartet auf den Abschluss des Blocks, und der Block wartet auf die Freigabe des Haupt-Threads — es entsteht ein Deadlock. Die Anwendung hängt.
Beispielcode, der einen Deadlock verursacht:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print("Anwendung gestartet")
// Dieser Aufruf verursacht einen Deadlock
DispatchQueue.main.sync {
print("Dieser Code wird niemals ausgeführt")
}
print("Dieser Code wird auch nicht erreicht")
return true
}