Для этого можно использовать базовую функцию suspendCoroutine{..}
, например,
class SuspendWait() {
private lateinit var myCont: Continuation<Unit>
suspend fun sleepAndWait() = suspendCoroutine<Unit>{ cont ->
myCont = cont
}
fun resume() {
val cont = myCont
myCont = null
cont.resume(Unit)
}
}
Понятно, что в коде есть проблемы, например, Поле myCont
не синхронизировано, ожидается, что sleepAndWait
вызывается до resume
и так далее, надеюсь, идея понятна.
Существует еще одно решение с классом Mutex
из библиотеки kotlinx.coroutines.
class SuspendWait2 {
private val mutex = Mutex(locaked = true)
suspend fun sleepAndWait() = mutex.withLock{}
fun resume() {
mutex.unlock()
}
}