Вопрос проверяет базовое понимание способов выполнения задач в GCD и умение объяснить влияние на поток выполнения.
sync выполняет задачу синхронно и блокирует текущий поток до её завершения.async добавляет задачу в очередь и сразу возвращает управление, не блокируя поток.
При sync код выполняется последовательно, при async — параллельно или позже.
Неправильное использование sync может привести к зависаниям приложения.
Разница между sync и async заключается не в потоках, а в поведении вызывающего кода.
sync — это способ выполнения, при котором текущий поток ждёт завершения задачи.
async — это способ выполнения, при котором задача ставится в очередь, а выполнение продолжается сразу.
sync)При использовании sync текущий поток блокируется.
queue.sync {
// выполнение задачи
}
текущий поток ждёт окончания блока
код после sync выполнится только после завершения
опасен при работе с main queue
async)async не блокирует поток.
queue.async {
// выполнение задачи
}
задача выполняется позже
текущий поток продолжает работу
безопасен для UI при работе с background queue
Важно понимать, что:
sync и async не определяют поток
они определяют, ждёт ли вызывающий код завершения задачи
async используется в большинстве случаев. sync стоит применять осторожно и только тогда, когда действительно нужно дождаться результата.