TGViewer
SwiftyGroup SwiftyGroup @swiftynew · 2.35K subscribers
Post #710 2.35K
Собеседование: почему actor не гарантирует порядок ответов в UI?

Вопрос ловит тех, кто запомнил actors как защиту от гонок, но не отделяет data race от логической гонки.
Сильный ответ: actor сериализует доступ к своему изолированному состоянию. Но каждый await это точка приостановки, после нее другая задача может зайти в actor и изменить состояние. Data race не будет, зато устаревший ответ может приехать позже нового.

Мини-пример:

actor ImageLoader {
private var cache: [URL: Data] = [:]

func data(for url: URL) async throws -> Data {
if let cached = cache[url] { return cached }

let (data, _) = try await URLSession.shared.data(from: url)
cache[url] = data
return data
}
}

Код безопасен по памяти: словарь не мутируется из двух потоков одновременно. Но если экран запросил картинку A, потом B, ответ A может завершиться позже и перерисовать UI старым состоянием, если caller не проверяет актуальный id.

На интервью хороший вывод звучит так: actor решает проблему изоляции данных, но порядок пользовательских намерений надо моделировать отдельно. Для SwiftUI это часто .task(id:), сравнение requestID перед присваиванием или cancellation старой задачи.

Источник: The Swift Programming Language, Concurrency

#Swift #Concurrency #Interview #iOS #Actors
  • ❤ 8
  • 👍 2
More from @swiftynew
  1. Oct 1, 2026SwiftUI .task: как не словить гонку при загрузке данных .task(id:) хорош для экрана, где з…
  2. Sep 29, 2026⚡️⚡️AI-агент съел токены и потерял контекст. Что делать? Разберемся на Mobius 2026 Autumn.…
  3. Sep 22, 2026Всем привет😎. Уже прилетел отказ от Apple: «Приложение падает при запуске». Начал проверя…
  4. Sep 17, 2026Доигрались, вайбкодеры? Apple из-за вас меняет файл проекта .pbxproj ➡️ .xcproj 📁 Раньше…
  5. Sep 16, 2026iPhone Duo Design Guidelines Подъехали подробные гайдлайны по тому, как надо адаптировать…
  6. Sep 12, 2026Xcode 27 RC уже вышел, и приложения, собранные в нём, уже можно отправлять на проверку в A…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →