В чем разница между supervisorScope и coroutineScope

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

Ответ

supervisorScope и coroutineScope — оба создают новую область видимости для корутин, но различаются обработкой ошибок:

  1. coroutineScope
    Если дочерняя корутина падает с исключением, отменяются все остальные дочерние корутины и сама область.
    coroutineScope {
        launch { throw RuntimeException() } // отменит все корутины внутри scope
        launch { delay(1000); println("Не выполнится") }
    }
  1. supervisorScope
    Исключение в одной дочерней корутине не влияет на другие.
    supervisorScope {
        launch { throw RuntimeException() } // не затронет другие корутины
        launch { delay(1000); println("Выполнится") }
    }

Где использовать:

  • supervisorScope — для независимых задач (например, несколько параллельных запросов, где один может упасть).
  • coroutineScope — когда задачи связаны и отмена одной должна остановить другие.