`launch` starts a coroutine for side-effects and returns a `Job`. `async` returns a `Deferred<T>` for a result and you `await()` it; both should run inside a scope (structured concurrency).
coroutineScope {
val a = async { 1 }
val b = async { 2 }
val sum = a.await() + b.await()
println(sum)
}