Вопрос проверяет понимание современных средств асинхронного программирования в Swift и классических примитивов многопоточности.
GCD (Grand Central Dispatch) предоставляет низкоуровневые очереди и синхронизированные вызовы sync/async, требуя явного управления задачами и колбэками. async/await — новый синтаксис на основе Swift Concurrency с Task и Actor, упрощает чтение асинхронного кода, позволяет писать его как последовательный, автоматически управляет жизненным циклом задач.
GCD:
Работа с DispatchQueue, DispatchGroup, DispatchSemaphore.
Колбэки и closure-ориентированный стиль.
Swift Concurrency (async/await):
Функции объявляют async и вызываются через await.
Управляются Task и структурой Actor для безопасности.
Пример GCD:
DispatchQueue.global().async {
let data = fetchData()
DispatchQueue.main.async {
updateUI(data)
}
}Пример async/await:
Task {
let data = await fetchData()
updateUI(data)
}Преимущества async/await:
Читаемый линейный код.
Встроенная отмена и обработка ошибок через Task.cancel(), try.
Урегулированная модель конкурентности.
Вывод:
Для нового кода на Swift 5.5+ рекомендуется async/await; GCD применим для поддержки старых версий или специфичных сценариев.