【发布时间】:2019-09-04 14:35:27
【问题描述】:
在某些示例/说明中,开发人员在挂起方法中调用挂起方法。为什么?
我知道您不能在启动或其他挂起方法之外调用挂起方法,但为什么要在挂起内部挂起?内存问题?更多线程会更好地管理内存吗?
提前感谢您的任何意见
【问题讨论】:
在某些示例/说明中,开发人员在挂起方法中调用挂起方法。为什么?
我知道您不能在启动或其他挂起方法之外调用挂起方法,但为什么要在挂起内部挂起?内存问题?更多线程会更好地管理内存吗?
提前感谢您的任何意见
【问题讨论】:
问题和陈述似乎有点倒退。让我们试着解决这个问题。
如果您的方法阻塞,您希望将其标记为可暂停。这是 Kotlin 编译器的指令,用于重写标记为 suspend 的方法之后的所有内容作为延续。
这反过来又可以实现更好的并发性。当您的方法阻塞时,继续被暂停,并且同一线程在其他任务上工作。
将您的方法标记为 suspend 不会影响内存占用或 Kotlin 运行时使用的线程数量。
【讨论】:
suspend 关键字只是一个函数可以阻塞的指示符。除了确保编译器知道它只能在根目录下使用协程调用之外,它本身并没有做任何事情。
意味着一系列挂起函数必须以launch、async 等开头。
【讨论】:
当您编写挂起函数时,您并不知道可以使用它的所有地方,就像您不知道常规函数一样。 您只知道执行需要时间,因此需要在协程中调用(即标记为挂起)
因此,有时您最终会在另一个挂起函数中调用挂起函数。
【讨论】: