Вопрос проверяет знание о независимости корутин в GlobalScope от других CoroutineScope.
Корутины в GlobalScope не зависят от других CoroutineScope, поэтому их нельзя отменить через cancel() родительского скоупа. Они продолжат выполняться, пока не завершатся самостоятельно или не будет вызван cancel напрямую.
1. Поведение GlobalScope:
Корни корутин в GlobalScope — это самостоятельные сущности, не привязанные к иерархии других Job.
Даже если родительский CoroutineScope отменён, корутина в GlobalScope не получит уведомление об этом.
2. Пример:
val parentScope = CoroutineScope(Job())
parentScope.launch {
GlobalScope.launch {
repeat(100) {
delay(1000)
println("Корутина в GlobalScope всё ещё работает")
}
}
}
parentScope.cancel() // Не влияет на корутину в GlobalScope 3. Как отменить корутину в GlobalScope?
Сохранять Job и вызывать cancel() вручную:
val job = GlobalScope.launch { ... }
job.cancel() Вывод:GlobalScope игнорирует отмену родительских скоупов, что требует ручного управления.