В launch ошибки распространяются непосредственно на родительский корутинный контекст, что приводит к падению приложения, если они не обработаны. В async ошибки откладываются и возникают только при вызове .await().
launch
async
.await()
Например:
kotlin