假设我有一个片段打开另一个片段并等待该片段的答案。
kotlin协同程序是否可以使代码看起来同步?
这意味着什么?
result = await openFragment()
答案 0 :(得分:1)
使用kotlin 1.3 coroutine,您可以执行以下操作:
val myFragment = async { //Your asynchronous task here }
这将返回Deferred对象,如官方文档所述,“一个轻量的非阻塞未来,表示以后会提供结果的承诺”。当您想获得此任务的结果时,请执行以下操作:
val result = myFragment.await()
或者,您可以使用Async样式的函数在协程之外启动任务。只需定义一个这样的函数:
fun openFragment() = GlobalScope.async {
//Your asynchronous task here
}
然后您可以在协程之外执行此操作:
val myFragment = openFragment()
然后,您可以通过await函数以与上述相同的方式获得任务的结果。这行仍然必须放在协程中。
val result = myFragment.await()