| 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