Kotlin Coroutine

Flow exception handling (Part 1)

No try/catch inside Flow!?

Guowei Lv

3 minute read

You may have heard that “No try/catch inside Flow” or “Only use catch() operator”. But why? Let’s explore from the beginning. Here is a very simple setup: fun main() = runBlocking { val worker = Worker() val scope = CoroutineScope(EmptyCoroutineContext) val flow = flow { emit(1) emit(2) emit(3) } scope.launch { try { flow.collect { println(worker.doWork(it)) } } catch (e: Exception) { println("Error in collect: ${e.message}") } } delay(10000) } class Worker { fun doWork(n: Int): String = if (Random.

What is a Coroutine?

What is actually a Coroutine?

Guowei Lv

2 minute read

The first question we should ask when learning Kotlin Coroutine is: what is a Coroutine after all? Let’s go back to the Thread world and ask the same question, what is a Thread? Here is code that will create a simple Thread and start it: val thread = thread { } So the answer seems obvious, a Thread is just the Thread object returned. Easy. Can we say the same in the Coroutine world?