Same here. I think the whole machinery of coroutines is confusing.
The following code throws an exception
runBlocking {
async {
throw ArithmeticException()
}
}
Now, if we add a scope to async it will not throw an exception
runBlocking {
lifecycleScope.async {
throw ArithmeticException()
}
}