Coroutines Concepts
Suspend Function Shape
A suspend function can be called from another suspend context and still return an ordinary value.
Suspend Function Shape
SuspendFunctionShape.kt
import kotlin.coroutines.Continuation
import kotlin.coroutines.EmptyCoroutineContext
import kotlin.coroutines.startCoroutine
suspend fun loadLabel(id: Int): String {
val normalized = id.coerceAtLeast(0)
return "item-$normalized"
}
fun main() {
val id =
var output = "pending"
val job: suspend () -> String = {
loadLabel(id)
}
job.startCoroutine(object : Continuation<String> {
override val context = EmptyCoroutineContext
override fun resumeWith(result: Result<String>) {
output = result.getOrThrow()
}
})
println("result=$output")
}
import kotlin.coroutines.Continuation
import kotlin.coroutines.EmptyCoroutineContext
import kotlin.coroutines.startCoroutine
suspend fun loadLabel(id: Int): String {
val normalized = id.coerceAtLeast(0)
return "item-$normalized"
}
fun main() {
val id =
var output = "pending"
val job: suspend () -> String = {
loadLabel(id)
}
job.startCoroutine(object : Continuation<String> {
override val context = EmptyCoroutineContext
override fun resumeWith(result: Result<String>) {
output = result.getOrThrow()
}
})
println("result=$output")
}
import kotlin.coroutines.Continuation
import kotlin.coroutines.EmptyCoroutineContext
import kotlin.coroutines.startCoroutine
suspend fun loadLabel(id: Int): String {
val normalized = id.coerceAtLeast(0)
return "item-$normalized"
}
fun main() {
val id =
var output = "pending"
val job: suspend () -> String = {
loadLabel(id)
}
job.startCoroutine(object : Continuation<String> {
override val context = EmptyCoroutineContext
override fun resumeWith(result: Result<String>) {
output = result.getOrThrow()
}
})
println("result=$output")
}
suspend function
A suspend function marks work that can cooperate with a coroutine context, even when this tiny example completes immediately.