在哪些情况下您不想或不应该在 Kotlin 中使用协程?
In which cases you don't want or you shouldn't use coroutines in Kotlin?
我读过很多使用协程的冒险故事,但我没有找到关于为什么不应该或不能使用它们的原因。
为什么不将所有方法都用作挂起方法呢?
我这里的一些概念理解起来有些困难,所以我的问题假装是相反的情况(为什么不使用它),这样我可以通过对比更好地理解。
不让所有函数都挂起的主要原因是它们引入的开销,至少在 JVM 上是这样。每个可挂起的函数都编译成一个 Java 方法,该方法接收另一个参数,延续对象,它的主体编译成非常复杂的状态机代码,除其他外,总是实例化另一个延续对象并将其菊花链连接到那个作为参数接收。
因此,只要您无法从协程中获得,就不应该将它们用作默认的处理方式。
请看我对你问题的回答:
但我没有找到您不应该或不能使用它们的原因。
回答:
一种。您不应将它们用于任何前台任务。
b.您不应将它们用于任何 simple/real 快速操作。
C。您不应将它们用于任何类型的初始化。
为什么不把所有方法都用作挂起方法呢?
回答:
a) 这将被视为代码异味。这样做的错误做法。
b) 如果您将所有函数标记为挂起,那么每当您想调用挂起函数时,您都必须创建一个 运行 它的协程作用域。
c) 挂起功能测试困难。它需要来自 AndroidX 的 RunBlockingTest
的一些额外设置。
我读过很多使用协程的冒险故事,但我没有找到关于为什么不应该或不能使用它们的原因。
为什么不将所有方法都用作挂起方法呢?
我这里的一些概念理解起来有些困难,所以我的问题假装是相反的情况(为什么不使用它),这样我可以通过对比更好地理解。
不让所有函数都挂起的主要原因是它们引入的开销,至少在 JVM 上是这样。每个可挂起的函数都编译成一个 Java 方法,该方法接收另一个参数,延续对象,它的主体编译成非常复杂的状态机代码,除其他外,总是实例化另一个延续对象并将其菊花链连接到那个作为参数接收。
因此,只要您无法从协程中获得,就不应该将它们用作默认的处理方式。
请看我对你问题的回答:
但我没有找到您不应该或不能使用它们的原因。
回答: 一种。您不应将它们用于任何前台任务。
b.您不应将它们用于任何 simple/real 快速操作。
C。您不应将它们用于任何类型的初始化。为什么不把所有方法都用作挂起方法呢?
回答:
a) 这将被视为代码异味。这样做的错误做法。
b) 如果您将所有函数标记为挂起,那么每当您想调用挂起函数时,您都必须创建一个 运行 它的协程作用域。
c) 挂起功能测试困难。它需要来自 AndroidX 的RunBlockingTest
的一些额外设置。