我不明白为什么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重载或长时间运行。
答案 0 :(得分:0)
为什么操作必须可挂起?
允许内部暂停操作只会打开一罐蠕虫
您的问题似乎将“必须”与“可能”混为一谈。该操作不必是可挂起的,但是Kotlin允许它挂起。根本没有考虑过它,并允许在此处像Flow API中的其他任何地方使用可挂起的函数。如果不允许的话,我敢肯定会有100倍的用户问为什么在所有其他操作中reduce
会降级为不可暂停的操作。
无论如何,正如您所说,“蠕虫罐”对我来说似乎并不危险。您所面临的全部风险就是性能,而且您还可能以其他许多方式冒险,例如编写阻塞代码而不是暂停代码。