值和发射之间的 MutableStateFlow 差异

app*_*ano 3 kotlin kotlin-coroutines

在 MutableStateFlow 上使用值结束发出乐趣有什么区别?

fun main() = runBlocking {

    val mutable = MutableStateFlow(0)

    launch {
        mutable.collect {
            println(it)
        }
    }

    mutable.value = 1
    mutable.emit(2)
}
Run Code Online (Sandbox Code Playgroud)

Ten*_*r04 5

emit() 是一个包装调用以设置值的挂起函数:

override suspend fun emit(value: T) {
    this.value = value
}
Run Code Online (Sandbox Code Playgroud)

所以区别在于value即使不在协程中也可以设置值。emit()存在所以 StateFlow 可以从 Flow 继承。

源代码在这里。

  • 何时使用“emit”而不是“value”? (2认同)
  • @IgorGanapolsky 因为他们做的事情完全相同,所以没关系。IMO,使用“value”更清楚,因为它不会在 MutableStateFlow 上挂起。 (2认同)