Возврат значения, полученного в Kotlin coroutine

Я пытаюсь вернуть значение, полученное из сопрограммы

fun nonSuspending (): MyType { launch(CommonPool) { suspendingFunctionThatReturnsMyValue() } //Do something to get the value out of coroutine context return somehowGetMyValue } 

Я придумал следующее решение (не очень безопасно!):

 fun nonSuspending (): MyType { val deferred = async(CommonPool) { suspendingFunctionThatReturnsMyValue() } while (deferred.isActive) Thread.sleep(1) return deferred.getCompleted() } 

Я также думал об использовании шины событий, но есть ли более элегантное решение этой проблемы?

Заранее спасибо.

Ты можешь сделать

 val result = runBlocking(CommonPool) { suspendingFunctionThatReturnsMyValue() } 

для блокировки до тех пор, пока результат не будет доступен.