Карточка Middle Swift Concurrency спрашивают часто обновлено
Обернуть callback-API в async
Вопрос
Как превратить API с completion handler в async-функцию?
Попробуйте сами
Ответьте про себя или вслух, потом откройте ответ и сверьтесь.
Показать ответ и разбор
Коротко
try await withCheckedThrowingContinuation { cont in legacy { result in cont.resume(with: result) } }. Продолжение нужно возобновить ровно один раз.
Ответ
try await withCheckedThrowingContinuation { cont in legacy { result in cont.resume(with: result) } }. Продолжение нужно возобновить ровно один раз.
Разбор
Двойной resume это крэш, пропущенный навсегда подвешивает задачу. Checked-вариант пишет об этом в лог, unsafe быстрее, но без проверок.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.