如果异步的结果是一个值,那么挂起函数就足够了。
    但是如果有多个值,比如下载进度。具体可以看隔壁 sealed class

    1. val intFLow = flow {
    2. (1..3).forEach {
    3. emit(it)
    4. delay(100)
    5. }
    6. }
    7. companion object {
    8. @JvmStatic
    9. fun main(array: Array<String>) {
    10. GlobalScope.launch {
    11. intFLow.flowOn(Dispatchers.IO)
    12. .collect {
    13. println(it)
    14. }
    15. }
    16. Thread.sleep(1000)
    17. }

    其实从另一个角度去看这个流。
    我们之前是用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 ]