업데이트:

카테고리:

/

태그: , ,

Flow

suspend 함수는 리턴된 값을 순차적으로 내보낸다. → 코루틴 작업중에 갱신되는 값을 반영하기가 힘들다.

Flow 는 여러값을 순차적으로 내보낼 수 있다.

FlowCold Stream 으로 요청해야만 값을 방출하기 한다.

[ Producer ] [ Intermediary ] [ Consumer ]

data 생산값이나 스트림 수정스트림의 값을 사용

fun simple(): Flow<Int> = flow {
	for (i in 1..3) {
		delay(100)
		// 값을 내보낼 때 사용
		emit(1)
	} 
}

fun main() = runBlocking<Unit> {
	launch {
		for (k in 1..3) {
			println("I'm not blocked $k")
			delay(100)
		}
	}
	simple().collect { value -> println(value) }
}

I`m not blocked 의 값이 먼저 나오고 그 다음에 value만 출력되게 된다.

combine

combine

2가지 콘텐츠가 결합이 된 순간부터 emit이 일어나고 한쪽 데이터가 업데이트 되면 새로운 값이 발행된다.

zip

zip

combine가 동일하게 두 값이 결합이 되어야 방출이 시작되는 것은 똑같지만, 무조건 2가지 값의 업데이트가 발생해야 결합된 값이 방출된다.

그리고 실행 순서를 엄격하게 따지기 때문에 한쪽 값이 변경되는 동안 다른쪽 값이 2번이상 변해도 방출된 순서대로 결합을 하여 내보낸다.

merge

merge

두 플로우를 합쳐서 하나의 새로운 flow를 만들어준다.