kotlin coroutines与android客户端交互

时间:2018-05-26 18:09:01

标签: android-fragments kotlinx.coroutines

假设我有一个片段打开另一个片段并等待该片段的答案。

kotlin协同程序是否可以使代码看起来同步?

这意味着什么?

result = await openFragment()

1 个答案:

答案 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()