Kotlin 减少流量的操作需要挂起功能

Kotlin 减少流量的操作需要挂起功能,kotlin,kotlin-coroutines,Kotlin,Kotlin Coroutines,我不明白为什么Kotlin Flow reduce、fold函数具有以下特征: 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 ope

我不明白为什么Kotlin Flow reduce、fold函数具有以下特征:

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
public suspend fun Flow.reduce(操作:suspend(累加器:S,值:T)->S):S
public suspend inline fun Flow.fold(
首字母:R,
交叉内联操作:挂起(acc:R,值:T)->R:R
为什么
操作必须是可暂停的?很明显,流本身是异步的,但是减少操作很可能非常便宜。只应在发出下一个值时调用操作。允许在
操作中暂停只会打开一罐蠕虫,因为这两个函数都应该累积值,而不是用它们来做IO繁重或长期运行的事情

为什么手术必须暂停

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

你的问题似乎把“必须”和“可能”混为一谈了。该操作不必是可挂起的,但Kotlin允许挂起。它完全不是固执己见的,它允许在这里使用可挂起的函数,就像在FlowAPI中的任何其他地方一样。如果它不允许,我肯定会有100倍多的用户询问为什么在所有其他操作中,
reduce
被降级为不可挂起的操作

不管怎样,你说的“虫子罐头”,对我来说似乎没有那么危险。您所面临的风险是性能,而您在许多其他方面也面临着性能风险,例如编写阻塞代码而不是挂起代码