Вопрос на собеседовании · iOS-разработчик

Как async/await и actors в Swift помогают безопасно работать с конкурентностью?

Короткий ответ, ключевые тезисы и ошибки, которых стоит избежать на интервью.

Обновлено 19 августа 2026 г.Встречается почти всегда
iOS-разработчикПрофессии и разделы
Короткий ответ

async/await позволяет описывать асинхронную операцию как последовательный код: функция может приостановиться, освободить поток и продолжить позже. Task наследует часть контекста создателя, а отмена кооперативна: API и собственный код должны проверять её и не публиковать устаревший результат после ухода пользователя с экрана.

Actor защищает своё изменяемое состояние последовательным доступом через изоляцию. При обращении к actor из другого контекста нужен await, а передаваемые между конкурентными контекстами данные должны быть безопасны для передачи, что отражает Sendable. MainActor — отдельная изоляция для UI, но не причина выполнять на главном потоке тяжёлые вычисления.

01 · Структура ответа

Что важно сказать интервьюеру

Начните с определения, затем объясните механизм и закончите примером из практики. Для полного ответа раскройте эти тезисы:

await обозначает потенциальную приостановку, а не новый поток.
Отмена Task кооперативна.
Actor изолирует изменяемое состояние.
MainActor применяют к UI и связанному состоянию.

02 · Пример

Как объяснить на практике

SearchStore реализуют как actor и хранят там кэш ответов. Экран отменяет предыдущую Task при новом вводе, запрашивает actor, а затем через MainActor применяет результат только если запрос всё ещё актуален. Так кэш не получает гонку, а UI не показывает старую выдачу.

Не заучивайте формулировку дословно. Свяжите принцип с задачей из собственного проекта — интервьюер почти наверняка попросит уточнить детали реализации и компромиссы.

03 · Ошибки

Чего избегать в ответе

Считать, что actor автоматически делает весь код параллельным.
Игнорировать cancellation при каждом новом поисковом запросе.
Помещать тяжёлый I/O или вычисления на MainActor.

04 · Углубление

Что могут спросить следом

  1. Чем actor отличается от serial DispatchQueue?
  2. Что означает Sendable?
  3. Как bridge-ить completion API в async/await?

Практика ответа

Ответьте вслух, а не про себя

Откроем тренировку сразу на этом вопросе. Выберите грейд, сформулируйте ответ и сравните его с подсказкой.

Потренировать ответ