Назад к задачам
Middle — Senior
7

Контролируемый асинхронный запуск последовательных UseCase‑операций

Компании, где спрашивали:

Salmon
Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

Необходимо построить механизм выполнения набора задач, соблюдая следующую последовательность:

  • Сначала запускается FirstUseCase и выполнение останавливается, пока он не завершится успешно.
  • После подтверждения успеха FirstUseCase параллельно стартуют SecondUseCase и ThirdUseCase.
  • Все остальные действия могут выполняться одновременно без ожидания.
  • Результаты (успех/ошибка) обрабатываются через методы .onSuccess и .onFailure.
internal class TaskDelegate @Inject constructor(
    private val firstUseCase: UseCaseOne,
    private val repository: Storage,
    private val secondUseCase: UseCaseTwo,
    private val thirdUseCase: UseCaseThree,
    private val dataProcessor: DataManager,
) {
    fun executeTasks() {
        firstUseCase(UseCaseOne.Params())
            .onSuccess { repository.updateData() }

        dataProcessor.processData()

        secondUseCase(UseCaseTwo.Params(timeoutDuration))
            .onSuccess { repository.updateData() }

        thirdUseCase(Unit)
            .onSuccess {
                // something
            }
            .onFailure {
                // something
            }
    }
}