首页 > 解决方案 > 如果我在 Kotlin 中使用启动,我可以获得返回实际值吗?

问题描述

我正在学习 Kotlin 的协程。

async在 Kotlin 的协程中使用的代码 A和我可以使用.await()延迟值来获得其最终结果,因此one.await()将返回 Int。

如果我launch在协程中使用,我可以得到实际值one.await()吗?

代码 A

val time = measureTimeMillis {
    val one = async { doSomethingUsefulOne() }
    val two = async { doSomethingUsefulTwo() }
    println("The answer is ${one.await() + two.await()}")
}
println("Completed in $time ms")       

suspend fun doSomethingUsefulOne(): Int {
    delay(1000L) // pretend we are doing something useful here
    return 13
}

suspend fun doSomethingUsefulTwo(): Int {
    delay(1000L) // pretend we are doing something useful here, too
    return 29
}

标签: kotlinkotlin-coroutines

解决方案


如果您使用launch,“实际值”Unit就像您从签名中看到的那样

fun CoroutineScope.launch(
    context: CoroutineContext = EmptyCoroutineContext,
    start: CoroutineStart = CoroutineStart.DEFAULT,
    block: suspend CoroutineScope.() -> Unit
): Job (source)

所以你甚至不需要启动它。

launch如果您将lambda 传递给

launch { doSomethingUsefulOne() }

真的

launch { doSomethingUsefulOne(); Unit }

并且价值doSomethingUsefulOne()被丢弃。


推荐阅读