Android flow 每秒异步返回一个值

package com.example.android_flow_learn

import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import org.junit.Test

import org.junit.Assert.*

/**
 * Example local unit test, which will execute on the development machine (host).
 *
 * See [testing documentation](http://d.android.com/tools/testing).
 */
class CoroutineTest01 {
    //返回了多个值 但不是异步
    fun simpleList(): List<Int> = listOf(1, 2, 3)

    //每秒  返回了多个值   也不是异步
    fun simpleSequence(): Sequence<Int> = sequence {
        for (i in 1..3) {
            Thread.sleep(1000) //阻塞 也不是异步
            //加入到序列
            yield(i)
        }
    }

    //返回了多个值 也是异步,但是是一次性返回了多个值
    suspend fun simpleList2(): List<Int> {
        delay(100)
        return listOf<Int>(1, 2, 3)

    }

    suspend fun simpleFlow() = flow<Int> {
        for (i in 1..3) {
            delay(1000)
            emit(i)
        }
    }


    @Test
    fun `test multiple values`() {
//        simpleList().forEach { value -> println(value) }
//        simpleSequence().forEach { value -> println(value) }
        runBlocking {
//            simpleList2().forEach { value -> println(value) }

            launch {
                for(k in 1..3){
                    println("I,m not blocked $k")
                    delay(1500)
                }
            }
            simpleFlow().collect{ value->
                println(value)
            }



        }


    }
}

这里面的flow挂起方式是可以不写的

     fun simpleFlow() = flow<Int> {
        for (i in 1..3) {
            delay(1000)
            emit(i)
        }
    }

猜你喜欢

转载自blog.csdn.net/mp624183768/article/details/126474356