Junior — Middle
Jakie zachowanie jest oczekiwane, jeśli wywołasz synchroniczne zadanie na głównym wątku za pomocą DispatchQueue.main.sync w metodzie AppDelegate?
sobes.tech AI
Odpowiedź od AI
Вызов DispatchQueue.main.sync внутри метода AppDelegate (который уже выполняется на главном потоке) приведёт к взаимной блокировке (deadlock). Это происходит потому, что:
DispatchQueue.main.syncпытается синхронно выполнить задачу на главном потоке.- Главный поток уже занят выполнением текущего метода
AppDelegateи ждёт завершения вызова. - Задача, переданная в
sync, не может начаться, так как главный поток занят.
В результате оба процесса ждут друг друга бесконечно, что приводит к зависанию приложения.
Чтобы избежать этого, нужно использовать DispatchQueue.main.async для асинхронного выполнения или выполнять синхронные вызовы на других потоках, но не на главном.