首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Coroutine依赖于另一个功能

Coroutine依赖于另一个功能
EN

Stack Overflow用户
提问于 2019-02-20 01:00:42
回答 1查看 0关注 0票数 0

我有三个函数,让我们称它们为A(),B()和C()。A和C是包含对async.await()的调用的函数,因此必须从协程中调用它们。功能B显示UI对话框,其返回值取决于功能C.

我最初尝试了以下内容:

    fun main() = launch {
        A()
        val value = B()
        C(value)
    }

发生的是函数A被调用,然后是函数B,然后在等待函数B返回之前立即调用函数C. 我究竟做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2019-02-20 10:09:47

您可能希望suspendCoroutine{..}从函数中调用该函数B()以使其等待关闭对话框,因此您具有该值。此外,可能需要确保从UI线程显示对话框。withContext{..}来自kotlinx.coroutines的函数应该有帮助

我看到以下解决方案:

fun main() = Dispatchers.Default.launch {
  A()
  val value = withContext(Dispatchers.Swing) {
    suspendCoroutine { cont ->
      showDialogFromB(cont)
    }
  }
  C(value)
}

cont具有类型Continuation<T>,T是该类型value。界面有2个功能 - result(T)resumeWithException(Throwable)。您可以下标对话框内部以调用其中一种方法。可能最好调用resumeWithExceptionwhen对话框取消。该suspendCoroutine函数将暂停执行,释放堆栈。对cont函数的调用将恢复执行

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档