如果异步的结果是一个值,那么挂起函数就足够了。
但是如果有多个值,比如下载进度。具体可以看隔壁 sealed class
val intFLow = flow {
(1..3).forEach {
emit(it)
delay(100)
}
}
companion object {
@JvmStatic
fun main(array: Array<String>) {
GlobalScope.launch {
intFLow.flowOn(Dispatchers.IO)
.collect {
println(it)
}
}
Thread.sleep(1000)
}
其实从另一个角度去看这个流。
我们之前是用Rx 来写一个流式的。 是否发现Rx和Flow 很类似呢。
val myIntStream: Observable<Int> = Observable.create { it.emit(1) }
val myIntFlow: Flow<Int> = flow { emit(1) }
参考:
[ Crash Course Kotlin Flows, Channels and Shared/State Flows ]