В чем разница между Job и Deferred в Coroutines

«В чем разница между Job и Deferred в Coroutines» — вопрос из категории Coroutines и Flow, который задают на 24% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Job и Deferred — оба представляют корутины, но с разными целями:

  • Job — это фоновый процесс без возвращаемого значения. Управляется методами start(), cancel(), join().
    val job = launch { /* работа без результата */ }
    job.cancel()
  • Deferred — это Job с результатом (наследует от Job). Возвращает значение через await().
    val deferred = async { 42 }
    val result = deferred.await() // 42

Ключевое отличие: Deferred используется для асинхронных вычислений с возвратом данных, а Job — для фоновых задач без результата.