Вопрос проверяет понимание основ Grand Central Dispatch и разницы между синхронным и асинхронным выполнением кода.
Синхронная задача (sync) блокирует текущий поток до завершения работы в указанной очереди. Асинхронная (async) ставит задачу в очередь и сразу возвращает управление, не дожидаясь выполнения. Это позволяет не блокировать главный поток для тяжёлых операций.
sync:
Не возвращается, пока задача не выполнена.
Может привести к дедлоку, если вызвать sync на той же очереди.
Пример:
DispatchQueue.global().sync {
print("Выполняется в той же нити")
}async:
Сразу возвращает управление, задача выполняется позже.
Подходит для фоновых операций.
Пример:
DispatchQueue.global().async {
print("Выполняется асинхронно")
}Сценарии использования:
sync для последовательных действий внутри фоновой очереди.
async для неперекрывающихся фоновых задач, чтобы не блокировать UI.
Вывод:
Выбор sync или async влияет на блокировку потоков и риск дедлока. Для непереключаемых операций UI всегда использовать async.