【发布时间】:2023-03-31 14:45:01
【问题描述】:
我不明白为什么 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 繁重或长时间运行的事情。
【问题讨论】: