Asynchronous operations are part of our challenges that we face daily. Sending, receiving or retrieving data has to be offloaded to another thread so that we don't freeze or crash our app.
Luckily with Kotlin Coroutines, this got a whole lot easier. We can model asynchronous data handling operations with the help of suspending functions.
But what if we are trying to represent a stream of data? What options do we have?
This talk will introduce the different options Kotlin Coroutines give us for representing streams. We'll take a look at Channels and Flows, how and when to use either of them, how you can build on top of them with custom operators and some patterns specific to Android development.