Checking a coroutine for completion (low level)

(This is a low-level experiment to understand coroutines better, in particular startCoroutine and suspendCoroutine.)

Currently I set a state variable to null on completion and check for that in a while loop. Is there a less indirect way of checking a coroutine for completion?

import kotlin.coroutines.* var state: Pair<Int, Continuation<Unit>>? = null suspend fun countdown(): String { for (i in 3 downTo 1) { suspendCoroutine<Unit> { continuation -> state = Pair(i, continuation) } } return "done!" } fun main() { val completion = Continuation<String>(EmptyCoroutineContext) { result -> state = null // complete! println(result) } ::countdown.startCoroutine(completion) while (state != null) { // complete? val (i, continuation) = state!! println(i) continuation.resume(Unit) } } 

submitted by /u/fredoverflow
[link] [comments]