Чем Task.sleep отличается от asyncAfter?
Суть
Task.sleep(for:)— асинхронная пауза внутри текущей задачи. Задача приостанавливается, поток возвращается в пул; после паузы код продолжается с того же места, на той же изоляции. Пауза отменяемая: если задачу отменили,Task.sleepнемедленно бросаетCancellationError. Работает в любой задаче — и структурированной, и созданной черезTask { }.DispatchQueue.asyncAfter(deadline:)— GCD планирует замыкание на очередь не раньше указанного времени. Вызывающий код продолжается сразу; замыкание — отдельная единица работы вне дерева задач, без отмены (разве что обернуть вDispatchWorkItemи вызватьcancel()до старта) и без наследования изоляции/приоритета.
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep