Что случится, если использовать синхронную диспетчеризацию на главной очереди в глобальном контексте?

Причина в том, что главная очередь уже занята выполнением текущего кода, и синхронный вызов пытается выполнить блок, ожидая его завершения.

Короткий ответ

Что ответить на собеседовании

Причина в том, что главная очередь уже занята выполнением текущего кода, и синхронный вызов пытается выполнить блок, ожидая его завершения. Но блок не может начаться, пока текущий код не завершится, что приводит к бесконечному ожиданию.

Подробный разбор

Ответ с пояснениями

Если вызвать синхронную диспетчеризацию (например, DispatchQueue.main.sync { ... }) на главной очереди из главного потока, произойдет дедлок (взаимная блокировка).

Причина в том, что главная очередь уже занята выполнением текущего кода, и синхронный вызов пытается выполнить блок, ожидая его завершения. Но блок не может начаться, пока текущий код не завершится, что приводит к бесконечному ожиданию.

Поэтому синхронные вызовы на главной очереди из главного потока следует избегать. Вместо этого используйте асинхронные вызовы (DispatchQueue.main.async { ... }), которые ставят блок в очередь и позволяют текущему коду завершиться.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее