Why async throwing exception without calling await() method?

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()
            }
        }