具有 android 客户端交互的 kotlin 协程

kotlin coroutines with android client side interaction

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

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

意思是这样的?

result = await openFragment()

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

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

这将 return 一个 Deferred 对象,如官方文档所述,"a light-weight non-blocking future that represents a promise to provide a result later"。当你想得到这个任务的结果时,这样做:

val result = myFragment.await()

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

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

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

val myFragment = openFragment()

然后就可以通过await函数和上面一样的方式获取到任务的结果了。这行还是得放在协程里面。

val result = myFragment.await()