From a6aa7124cbffa17bbfbbb0f65d2720c8b52ad026 Mon Sep 17 00:00:00 2001 From: Daniel Slapman Date: Tue, 24 Sep 2024 21:56:57 +0200 Subject: [PATCH] await Future --- .../sk/coroutines/CoroutineScalaConversions.kt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/coroutines/src/main/kotlin/com/github/leviysoft/sk/coroutines/CoroutineScalaConversions.kt b/coroutines/src/main/kotlin/com/github/leviysoft/sk/coroutines/CoroutineScalaConversions.kt index ed7d1bd..e40251b 100644 --- a/coroutines/src/main/kotlin/com/github/leviysoft/sk/coroutines/CoroutineScalaConversions.kt +++ b/coroutines/src/main/kotlin/com/github/leviysoft/sk/coroutines/CoroutineScalaConversions.kt @@ -11,6 +11,8 @@ import scala.concurrent.Future import scala.concurrent.Promise import scala.util.Failure import scala.util.Success +import kotlin.coroutines.resume +import kotlin.coroutines.resumeWithException fun CoroutineScope.scalaFuture( context: CoroutineContext = EmptyCoroutineContext, @@ -59,4 +61,16 @@ fun Future.asDeferred(executor: ExecutionContext): Deferred { } }, executor) return result +} + +suspend fun Future.await(executor: ExecutionContext): T { + return suspendCancellableCoroutine { cont: CancellableContinuation -> + this.onComplete({ res -> + when(res) { + is Success -> cont.resume(res.value()) + is Failure -> cont.resumeWithException(res.exception()) + else -> throw IllegalStateException("Unreachable") + } + }, executor) + } } \ No newline at end of file