Вступить в клуб →
сложнаявопросSwift Concurrency: Task, акторы и MainActor

Актор токенов делает три запроса обновления, хотя данные в нём защищены

actor TokenStore {
    private var token: String?

    func validToken() async throws -> String {
        if let token { return token }
        let new = try await api.refreshToken()   // 1 секунда
        token = new
        return new
    }
}

При старте три экрана одновременно вызывают validToken(). На сервер уходят три запроса обновления, два последних получают ошибку: refresh-токен одноразовый. Разве актор не выполняет вызовы по очереди?

  • На await актор принимает другие вызовы
  • Актор параллелит вызовы с разных экранов
  • Свойство token нужно пометить nonisolated
  • Актор создаётся заново на каждом экране

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела