IT/Kotlin7 Coroutine Flow - 3부 세번째 시간을 가져보자. Exception 떨어질래야 떨어질 수 없는 예외처리 부분이다. Flow는 내부 코드 상에서 (+ operator) 예외가 발생하면 예외와 함께 종료된다. 그럼 일반적으로 통용되는 방법으로 예외를 핸들링해보면 아래와 같이 코드를 작성 할 수 있다. fun simple(): Flow = flow { for (i in 1..3) { println("Emitting $i") emit(i) // emit next value } } .map { value -> check(value println(value) } } catch (e: Throwable) { println("Caught $e") } } 실제로 위의 코드를 실행해보면, "2"에서 에러가 발생하고 끝이난다. 그런데 flow는 예.. 2020. 11. 21. Coroutine Flow - 2부 지난 번에 포스팅한 1부 에 이어서 계속 알아보려고 한다. Buffering flow에서 실행되는 작업이 오래 걸리는 작업일 때, collect를 수행하면 전체적으로 성능이 낮아 질 수 밖에 없다. (각 작업을 순차적으로 실행하는 flow의 컨셉에 따라...) fun simple(): Flow = flow { for (i in 1..3) { delay(100) // pretend we are asynchronously waiting 100 ms emit(i) // emit next value } } fun main() = runBlocking { val time = measureTimeMillis { simple().collect { value -> delay(300) // pretend we are p.. 2020. 11. 21. Coroutine Flow - 1부 코틀린에서 제공하는 코루틴 중 Flow에 대해 살펴보려고 한다. Flow는 이미 명명된 이름에서 짐작할 수 있듯이, 간단히 언급하면 Sequence의 비동기 버전 정도로 이해하면 될 것 같다. 좀 더 자세히 보면, Sequence는 Stream 단위의 데이터를 하나 처리하고 다음 하나 방식이지만, Flow는 Stream의 각 데이터 결과를 기다리지 않고 작업한다. (물론 값은 순차적으로 가져온다.) fun simple(): Flow = flow { println("Flow started") for (i in 1..3) { delay(100) emit(i) } } fun main() = runBlocking { println("Calling simple function...") simple().collec.. 2020. 11. 21. 이전 1 2 다음