`launch` uruchamia coroutine do efektów ubocznych i zwraca `Job`. `async` zwraca `Deferred<T>` z wynikiem i odbierasz go przez `await()`; oba powinny działać w scope (structured concurrency).
coroutineScope {
val a = async { 1 }
val b = async { 2 }
val sum = a.await() + b.await()
println(sum)
}