Kotlin 在这种情况下,您不需要';我不想要或者你不应该';在科特林不使用协同程序?
我读过很多关于使用协同程序的冒险故事,但我并没有发现为什么你们不应该或者不能使用它们 顺便问一下,为什么不将所有方法都用作挂起方法呢Kotlin 在这种情况下,您不需要';我不想要或者你不应该';在科特林不使用协同程序?,kotlin,kotlin-coroutines,coroutine,Kotlin,Kotlin Coroutines,Coroutine,我读过很多关于使用协同程序的冒险故事,但我并没有发现为什么你们不应该或者不能使用它们 顺便问一下,为什么不将所有方法都用作挂起方法呢 我在理解这里的一些概念时遇到了一些困难,因此,对于我的问题,我假装提出了相反的情况(为什么不使用它),这样相比之下,我可以更好地理解。不让所有函数都可挂起的主要原因是它们引入的开销,至少在JVM上是如此。每个可挂起的函数都编译成一个Java方法,该方法接收另一个参数continuation对象,其主体编译成相当复杂的状态机代码,除其他外,该代码总是实例化另一个co
我在理解这里的一些概念时遇到了一些困难,因此,对于我的问题,我假装提出了相反的情况(为什么不使用它),这样相比之下,我可以更好地理解。不让所有函数都可挂起的主要原因是它们引入的开销,至少在JVM上是如此。每个可挂起的函数都编译成一个Java方法,该方法接收另一个参数continuation对象,其主体编译成相当复杂的状态机代码,除其他外,该代码总是实例化另一个continuation对象,并将其菊花链连接到作为参数接收的对象
因此,无论何时,如果您无法从协同程序中获得任何好处,您都不应该将其作为默认的做事方式。请查看我对您的问题的回答:
回答: A.您不应将其用于任何前台任务。
B您不应将其用于任何简单/真正快速的操作。
C您不应该将它们用于任何类型的初始化
回答:
a) 这将被视为代码气味。这样做的错误做法。
b) 如果将所有函数标记为suspend,则无论何时调用suspend函数,都必须创建一个协同路由作用域来运行它。
c) 暂停功能的测试是困难的。它需要从AndroidX额外设置
RunBlockingTest
您不应该将它们用于同步工作或传输数据流(在这些情况下使用)。您可以将它们用于异步工作,我会发现,实际上“c.您不应该将它们用于任何类型的初始化”并不总是正确的,因为我会在ViewModel的init方法中看到一些带有协程初始化的代码示例,以便在UI加载时加载一些数据。