Kotlin Coroutine's structured concurrency. Cancelling a parent automatically cancels child jobs, unless explicitly handled not to. https://kotlinlang.org/docs/coroutines-basics.html
Stupidly, child cancellation cancels the parent scope as well, unless the scope opts out by including SupervisorJob.
Stupidly, child cancellation cancels the parent scope as well, unless the scope opts out by including SupervisorJob.