kotlin - 如果我在 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
}
解决方案
如果您使用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()
被丢弃。
推荐阅读
- php - 在 php 文件中包含 Blade.php 文件(带有已启动的 Laravel 实例)
- java - BottomNavigationView 不适用于导航
- kubernetes - 未知标志:--export,同时将秘密从一个命名空间复制到另一个 kubectl
- r - R中的足球数据-使用if语句检查元素中是否缺少属性?
- javascript - 联合类型的部分键作为打字稿中对象的键
- windows - 为什么 OSQuery 在读取 Windows EventLogs 时不包含“计算机”事件信息?
- mysql - 从列中选择唯一值,但基于另一个排序
- typescript - 如果我有一个构建器的部分类型。完成后如何输入?
- python - 如何触发 python.exe 已停止工作
- javascript - WordPress REST API JS 客户端返回未定义的帖子属性