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.