Skip to the content.

플로우 컨텍스트

예제 59: 플로우는 코루틴 컨텍스트에서

플로우는 현재 코루틴 컨텍스트에서 호출 됩니다.

import kotlinx.coroutines.* import kotlinx.coroutines.flow.* fun log(msg: String) = println("[${Thread.currentThread().name}] $msg") fun simple(): Flow<Int> = flow { log("flow를 시작합니다.") for (i in 1..10) { emit(i) } } fun main() = runBlocking<Unit> { launch(Dispatchers.IO) { simple() .collect { value -> log("${value}를 받음.") } } }

예제 60: 다른 컨텍스트로 옮겨갈 수 없는 플로우

import kotlinx.coroutines.* import kotlinx.coroutines.flow.* fun log(msg: String) = println("[${Thread.currentThread().name}] $msg") fun simple(): Flow<Int> = flow { withContext(Dispatchers.Default) { for (i in 1..10) { delay(100L) emit(i) } } } fun main() = runBlocking<Unit> { launch(Dispatchers.IO) { simple() .collect { value -> log("${value}를 받음.") } } }

예제 61: flowOn 연산자

flowOn 연산자를 통해 컨텍스트를 올바르게 바꿀 수 있습니다.

import kotlinx.coroutines.* import kotlinx.coroutines.flow.* fun log(msg: String) = println("[${Thread.currentThread().name}] $msg") fun simple(): Flow<Int> = flow { for (i in 1..10) { delay(100L) log("값 ${i}를 emit합니다.") emit(i) } }.flowOn(Dispatchers.Default) fun main() = runBlocking<Unit> { simple().collect { value -> log("${value}를 받음.") } }