如果异步的结果是一个值,那么挂起函数就足够了。
但是如果有多个值,比如下载进度。具体可以看隔壁 sealed class
val intFLow = flow {(1..3).forEach {emit(it)delay(100)}}companion object {@JvmStaticfun 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 ]
