流量减少操作需要暂停功能

时间:2019-12-30 09:53:38

标签: kotlin kotlin-coroutines

我不明白为什么Kotlin Flow会减少,折叠函数具有如下特征:

public suspend fun <S, T : S> Flow<T>.reduce(operation: suspend (accumulator: S, value: T) -> S): S

public suspend inline fun <T, R> Flow<T>.fold(
    initial: R,
    crossinline operation: suspend (acc: R, value: T) -> R): R

operation为什么必须可挂起?流程本身是异步的,这很明显,但是还原操作很可能非常便宜。仅在发出下一个值时才应调用该操作。在operation内允许暂停只会打开一蠕虫蠕虫,因为这两个函数都应该累积值,而不是对其进行IO重载或长时间运行。

1 个答案:

答案 0 :(得分:0)

  

为什么操作必须可挂起?

     

允许内部暂停操作只会打开一罐蠕虫

您的问题似乎将“必须”与“可能”混为一谈。该操作不必是可挂起的,但是Kotlin允许它挂起。根本没有考虑过它,并允许在此处像Flow API中的其他任何地方使用可挂起的函数。如果不允许的话,我敢肯定会有100倍的用户问为什么在所有其他操作中reduce会降级为不可暂停的操作。

无论如何,正如您所说,“蠕虫罐”对我来说似乎并不危险。您所面临的全部风险就是性能,而且您还可能以其他许多方式冒险,例如编写阻塞代码而不是暂停代码。