name: coroutines-kotlin description: Master Kotlin coroutines with suspend functions, flows, channels, and structured concurrency for building async applications.
Kotlin Coroutines
Master asynchronous programming in Kotlin with coroutines, flows, and structured concurrency.
Core Concepts
Basic Coroutine
fun main() = runBlocking {
launch {
delay(1000L)
println("World!")
}
println("Hello")
}
Suspend Functions
suspend fun fetchUser(id: String): User {
delay(1000) // Simulating network call
return User(id, "John Doe")
}
fun main() = runBlocking {
val user = fetchUser("123")
println(user)
}
Async/Await
suspend fun loadData(): Data = coroutineScope {
val user = async { fetchUser() }
val posts = async { fetchPosts() }
Data(user.await(), posts.await())
}
Flow
fun simpleFlow(): Flow<Int> = flow {
for (i in 1..3) {
delay(100)
emit(i)
}
}
fun main() = runBlocking {
simpleFlow().collect { value ->
println(value)
}
}
Channels
fun main() = runBlocking {
val channel = Channel<Int>()
launch {
for (x in 1..5) channel.send(x * x)
channel.close()
}
for (y in channel) println(y)
}
Best Practices
- Use structured concurrency
- Handle exceptions properly
- Use flows for streams
- Leverage coroutine scope
- Use dispatchers appropriately
- Avoid GlobalScope
- Test coroutines properly