Middle+
Cosa succede se nell'AppDelegate nel thread principale si chiama 'dispatchQueue.main.sync'?
sobes.tech AI
Risposta dell'AI
Si verifica un Deadlock (blocco reciproco).
Spiegazione:
AppDelegatefunziona sul thread principale.dispatchQueue.main.synctenta di eseguire il codice sul thread principale in modo sincrono, cioè aspetta che il blocco di codice termini.- Ma il thread principale è già occupato con l'esecuzione di
AppDelegatee aspetta che il blocco insyncfinisca. - Il blocco in
syncnon può iniziare perché il thread principale è occupato ad aspettare.
In breve, il thread principale aspetta che il blocco finisca, e il blocco aspetta che il thread principale sia libero — si verifica un deadlock. L'app si bloccherà.
Esempio di codice che provocherà un deadlock:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print("Applicazione avviata")
// Questa chiamata causerà un deadlock
DispatchQueue.main.sync {
print("Questo codice non verrà mai eseguito")
}
print("Questo codice non sarà raggiunto")
return true
}