【问题标题】:Suspend functions inside suspend functions挂起函数中的挂起函数
【发布时间】:2019-09-04 14:35:27
【问题描述】:

在某些示例/说明中,开发人员在挂起方法中调用挂起方法。为什么?

我知道您不能在启动或其他挂起方法之外调用挂起方法,但为什么要在挂起内部挂起?内存问题?更多线程会更好地管理内存吗?

提前感谢您的任何意见

【问题讨论】:

    标签: kotlin kotlin-coroutines


    【解决方案1】:

    问题和陈述似乎有点倒退。让我们试着解决这个问题。

    如果您的方法阻塞,您希望将其标记为可暂停。这是 Kotlin 编译器的指令,用于重写标记为 suspend 的方法之后的所有内容作为延续。

    这反过来又可以实现更好的并发性。当您的方法阻塞时,继续被暂停,并且同一线程在其他任务上工作。

    将您的方法标记为 suspend 不会影响内存占用或 Kotlin 运行时使用的线程数量。

    【讨论】:

      【解决方案2】:

      suspend 关键字只是一个函数可以阻塞的指示符。除了确保编译器知道它只能在根目录下使用协程调用之外,它本身并没有做任何事情。

      意味着一系列挂起函数必须以launchasync 等开头。

      【讨论】:

        【解决方案3】:

        当您编写挂起函数时,您并不知道可以使用它的所有地方,就像您不知道常规函数一样。 您只知道执行需要时间,因此需要在协程中调用(即标记为挂起)

        因此,有时您最终会在另一个挂起函数中调用挂起函数。

        【讨论】:

          猜你喜欢
          • 2020-01-08
          • 1970-01-01
          • 2020-01-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-24
          • 2020-04-13
          相关资源
          最近更新 更多