1

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

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

意思是这样的?

result = await openFragment()
4

1 回答 1

1

使用 kotlin 1.3 协程,您可以这样做:

val myFragment = async { //Your asynchronous task here }

这将返回一个 Deferred 对象,正如官方文档所描述的,“一个轻量级的非阻塞未来,代表了稍后提供结果的承诺”。当您想获得此任务的结果时,请执行以下操作:

val result = myFragment.await()

或者,您可以使用异步风格的函数在协程之外启动您的任务。只需定义一个这样的函数:

fun openFragment() = GlobalScope.async {
    //Your asynchronous task here
}

然后您可以在协程之外执行此操作:

val myFragment = openFragment()

然后就可以通过 await 函数以与上面相同的方式得到任务的结果。这条线仍然必须放在协程中。

val result = myFragment.await()
于 2019-01-01T04:57:21.617 回答