Разница между синхронными и асинхронными задачами
Суть
Термины — про то, ждёт ли вызывающий код завершения задачи.
- Синхронная (
queue.sync { }) — вызывающий поток блокируется, пока задача не выполнится, и только потом идёт дальше. Как оптимизация GCD обычно выполняет блок прямо на вызывающем потоке (новый поток не создаётся), но это не контракт:DispatchQueue.main.syncс фона выполнит блок на главном потоке. - Асинхронная (
queue.async { }) — задача ставится в очередь, вызывающий код продолжается сразу. Когда и на каком потоке выполнится блок, решает очередь: serial — после всех ранее добавленных задач, concurrent — возможно, параллельно с ними.
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep