interface Flow<out T> {
		suspend fun collect(collector: FlowCollector<T>)
}

플로우와 값들을 나타내는 다른 방법들의 비교

플로우의 특징

fun usersFlow(): Flow<String> = flow {
    repeat(3) {
        delay(1000)
        val ctx = currentCoroutineContext()
        val name = ctx[CoroutineName]?.name
        emit("User$it in $name")
    }
}

suspend fun main() {
    val users = usersFlow()
    withContext(CoroutineName("Name")) {
        val job = launch {
            users.collect { it ->
                println(it)
            }
        }
        
        launch {
            delay(2100)
            println("I got enough")
            job.cancel()
        }
    }
}

실행결과 : 
(1초후)
User0 in Name
(1초후)
User1 in Name
(0.1초후)
I got enough

궁금한 부분