@file:JvmMultifileClass @file:JvmName("Foo") package Hello import kotlin.concurrent.thread import kotlin.coroutines.suspendCoroutine import kotlin.coroutines.resume @kotlin.jvm.Volatile private var result = "" @kotlin.jvm.Volatile private var callback: Function0? = null suspend fun appendAndSuspend(s: String) { result += s suspendCoroutine { continuation -> callback = { continuation.resume(Unit) } } } suspend fun main(args: Array) { thread(isDaemon = true) { while (true) { val c = callback c?.invoke() Thread.sleep(500) } } appendAndSuspend(args[0]) appendAndSuspend(args[1]) println(result) callback = null }