Middle+
Co się stanie, jeśli w AppDelegate na głównym wątku wywołasz 'dispatchQueue.main.sync'?
sobes.tech AI
Odpowiedź od AI
Wystąpi Deadlock (wzajemne blokowanie).
Wyjaśnienie:
AppDelegatedziała na głównym wątku.dispatchQueue.main.syncpróbuje wykonać kod na głównym wątku synchronizacyjnie, tzn. czeka na zakończenie bloku kodu.- Ale główny wątek jest już zajęty wykonywaniem
AppDelegatei oczekuje na zakończenie bloku wsync. - Blok w
syncnie może się rozpocząć, ponieważ główny wątek jest zajęty oczekiwaniem.
Podsumowując, główny wątek czeka na wykonanie bloku, a blok czeka na zwolnienie głównego wątku — dochodzi do wzajemnego blokowania. Aplikacja się zawiesi.
Przykład kodu, który spowoduje Deadlock:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print("Aplikacja uruchomiona")
// To wywołanie spowoduje Deadlock
DispatchQueue.main.sync {
print("Ten kod nigdy nie zostanie wykonany")
}
print("Ten kod również nie zostanie osiągnięty")
return true
}