Job — это объект—дескриптор для корутины, который управляет её жизненным циклом. Job производная от CoroutineContext, которую мы вставлять в CoroutineScope. Job позволяет:
- Отменить корутину или группу(дочерних) корутин
 
- Узнать статус (
isActive,isCompleted,isCancelled) 
- Дождаться окончания (через 
job.join()) 
Для лучшего запоминания суть работы Job-а, можно сравнить с номером заказа в ресторане. По не нему можно проверить, готов ли заказ, можно отменить или получить заказ.
Все дочерние Job автоматически привязываются к родителю. Если родительский вызывает Job.cancel(), то все дочерние автоматически отменяются.
Что делает SupervisorJob?
Допустим в рамках скоупа имеются 3 запущеных корутины. Если один из них выкинет эксепшн, то оставшиеся 2 так же будут отменены. Это принцип работы корутин по умолчанию.
Но если нам нужно избежать такого поведения, то мы можем использовать SupervisorJob. Данный вид Job-ы при эксепшне НЕ даст отменить другие, работая как «изолятор».