Middle+
Какво ще се случи, ако в AppDelegate в основния поток извикате 'dispatchQueue.main.sync'?
sobes.tech AI
Отговор от AI
Настъпва взаимна блокировка (Deadlock).
Обяснение:
AppDelegateработи на главния поток.dispatchQueue.main.syncсе опитва да изпълни код на главния поток синхронно, т.е. чака завършването на блока.- Но главният поток вече е зает с изпълнението на
AppDelegateи чака блокът вsyncда приключи. - Блокът в
syncне може да започне, защото главният поток е зает да чака.
Обобщено, главният поток чака изпълнението на блока, а блокът чака освобождаването на главния поток — възниква взаимна блокировка. Приложението ще замръзне.
Примерен код, който ще предизвика Deadlock:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print("Приложението стартира")
// Този извик ще предизвика Deadlock
DispatchQueue.main.sync {
print("Този код никога няма да бъде изпълнен")
}
print("Този код също няма да бъде достигнат")
return true
}