Coroutines Concepts
Dispatcher Queue Model
A dispatcher decides where work should run; this example models dispatching as a deterministic queue of labels.
Dispatcher Queue Model
DispatcherQueueModel.kt
import kotlin.coroutines.Continuation
import kotlin.coroutines.EmptyCoroutineContext
import kotlin.coroutines.startCoroutine
suspend fun dispatch(lane: String, task: String): String {
return "$lane:$task"
}
fun main() {
val lane =
val queue = mutableListOf("parse", "render", "publish")
val handled = mutableListOf<String>()
val work: suspend () -> String = {
for (task in queue) {
handled.add(dispatch(lane, task))
}
handled.joinToString(",")
}
work.startCoroutine(object : Continuation<String> {
override val context = EmptyCoroutineContext
override fun resumeWith(result: Result<String>) {
handled.add("complete")
}
})
println("lane=$lane")
println("handled=" + handled.joinToString(","))
}
import kotlin.coroutines.Continuation
import kotlin.coroutines.EmptyCoroutineContext
import kotlin.coroutines.startCoroutine
suspend fun dispatch(lane: String, task: String): String {
return "$lane:$task"
}
fun main() {
val lane =
val queue = mutableListOf("parse", "render", "publish")
val handled = mutableListOf<String>()
val work: suspend () -> String = {
for (task in queue) {
handled.add(dispatch(lane, task))
}
handled.joinToString(",")
}
work.startCoroutine(object : Continuation<String> {
override val context = EmptyCoroutineContext
override fun resumeWith(result: Result<String>) {
handled.add("complete")
}
})
println("lane=$lane")
println("handled=" + handled.joinToString(","))
}
import kotlin.coroutines.Continuation
import kotlin.coroutines.EmptyCoroutineContext
import kotlin.coroutines.startCoroutine
suspend fun dispatch(lane: String, task: String): String {
return "$lane:$task"
}
fun main() {
val lane =
val queue = mutableListOf("parse", "render", "publish")
val handled = mutableListOf<String>()
val work: suspend () -> String = {
for (task in queue) {
handled.add(dispatch(lane, task))
}
handled.joinToString(",")
}
work.startCoroutine(object : Continuation<String> {
override val context = EmptyCoroutineContext
override fun resumeWith(result: Result<String>) {
handled.add("complete")
}
})
println("lane=$lane")
println("handled=" + handled.joinToString(","))
}
dispatcher
A dispatcher chooses an execution lane. This page models lanes as plain strings so replay stays deterministic.