Coroutines Concepts
Start Coroutine
startCoroutine runs a suspend lambda and reports its result through a continuation.
Start Coroutine
StartCoroutine.kt
import kotlin.coroutines.Continuation
import kotlin.coroutines.EmptyCoroutineContext
import kotlin.coroutines.startCoroutine
suspend fun doubleValue(value: Int): Int {
return value * 2
}
fun main() {
val input =
val events = mutableListOf("created")
val work: suspend () -> Int = {
events.add("running")
doubleValue(input)
}
work.startCoroutine(object : Continuation<Int> {
override val context = EmptyCoroutineContext
override fun resumeWith(result: Result<Int>) {
events.add("resumed=${result.getOrThrow()}")
}
})
println("events=" + events.joinToString(">"))
}
import kotlin.coroutines.Continuation
import kotlin.coroutines.EmptyCoroutineContext
import kotlin.coroutines.startCoroutine
suspend fun doubleValue(value: Int): Int {
return value * 2
}
fun main() {
val input =
val events = mutableListOf("created")
val work: suspend () -> Int = {
events.add("running")
doubleValue(input)
}
work.startCoroutine(object : Continuation<Int> {
override val context = EmptyCoroutineContext
override fun resumeWith(result: Result<Int>) {
events.add("resumed=${result.getOrThrow()}")
}
})
println("events=" + events.joinToString(">"))
}
import kotlin.coroutines.Continuation
import kotlin.coroutines.EmptyCoroutineContext
import kotlin.coroutines.startCoroutine
suspend fun doubleValue(value: Int): Int {
return value * 2
}
fun main() {
val input =
val events = mutableListOf("created")
val work: suspend () -> Int = {
events.add("running")
doubleValue(input)
}
work.startCoroutine(object : Continuation<Int> {
override val context = EmptyCoroutineContext
override fun resumeWith(result: Result<Int>) {
events.add("resumed=${result.getOrThrow()}")
}
})
println("events=" + events.joinToString(">"))
}
startCoroutine
`startCoroutine` is a standard-library bridge from a suspend lambda to an explicit continuation callback.