Ответ
Произойдёт взаимная блокировка (deadlock). Главный поток заблокируется, ожидая выполнения блока кода, который никогда не начнётся, потому что очередь занята этим же потоком.
Пример кода, вызывающего deadlock:
// Вызов из главного потока
DispatchQueue.main.sync {
print("Этот код никогда не выполнится")
}
// Поток заблокирован здесь навсегда
Правильное решение: Всегда используйте async для работы с главной очередью из главного же потока.
DispatchQueue.main.async {
print("Код выполнится в следующем цикле run loop")
}
Причина: Метод sync добавляет задачу в очередь и блокирует текущий поток до её завершения. Главный поток не может обработать новую задачу, пока сам заблокирован, что создаёт тупиковую ситуацию.