pseudo-code to illustrate what coroutineScope
// This is pseudo-code for purposes of understanding !!NOT TO BE USED AS IS!!
suspend fun <T> coroutineScope(block: suspend CoroutineScope.() -> T): T {
// Get the current coroutine context
val currentContext = coroutineContext
// Create a new Job that's a child of the current job
val scopeJob = Job(parent = currentContext[Job])
// Create a new scope with the new job
val scope = CoroutineScope(currentContext + scopeJob)
try {
// Execute the block and get result
val result = block(scope)
// This conceptually "waits" for all children to complete
// (In reality this would need to be done differently)
scopeJob.complete() // Signal no more children will be added
scopeJob.join() // Wait for existing children
return result
} catch (e: Exception) {
// Cancel all children on any exception
scopeJob.cancelChildren()
throw e
}
}
Backlinks