Зачем нужен Job? Что такое SupervisorJob?

Job — это объектдескриптор для корутины, который управляет её жизненным циклом. Job производная от CoroutineContext, которую мы вставлять в CoroutineScope. Job позволяет:

  • Отменить корутину или группу(дочерних) корутин
  • Узнать статус (isActive, isCompleted, isCancelled)
  • Дождаться окончания (через job.join())

Для лучшего запоминания суть работы Job-а, можно сравнить с номером заказа в ресторане. По не нему можно проверить, готов ли заказ, можно отменить или получить заказ.

Все дочерние Job автоматически привязываются к родителю. Если родительский вызывает Job.cancel(), то все дочерние автоматически отменяются.

Что делает SupervisorJob?

Допустим в рамках скоупа имеются 3 запущеных корутины. Если один из них выкинет эксепшн, то оставшиеся 2 так же будут отменены. Это принцип работы корутин по умолчанию.

Но если нам нужно избежать такого поведения, то мы можем использовать SupervisorJob. Данный вид Job-ы при эксепшне НЕ даст отменить другие, работая как «изолятор».


Опубликовано

в

,

от

Метки: