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.