diff --git a/coroutines/src/jvmMain/kotlin/dev/inmo/micro_utils/coroutines/LaunchSynchronously.kt b/coroutines/src/jvmMain/kotlin/dev/inmo/micro_utils/coroutines/LaunchSynchronously.kt index bfd044534b5..36e7d8b608a 100644 --- a/coroutines/src/jvmMain/kotlin/dev/inmo/micro_utils/coroutines/LaunchSynchronously.kt +++ b/coroutines/src/jvmMain/kotlin/dev/inmo/micro_utils/coroutines/LaunchSynchronously.kt @@ -3,17 +3,16 @@ package dev.inmo.micro_utils.coroutines import kotlinx.coroutines.* fun CoroutineScope.launchSynchronously(block: suspend CoroutineScope.() -> T): T { - var throwable: Throwable? = null - var result: T? = null + val deferred = CompletableDeferred() val objectToSynchronize = java.lang.Object() val launchCallback = { launch { safely( { - throwable = it + deferred.completeExceptionally(it) } ) { - result = block() + deferred.complete(block()) } synchronized(objectToSynchronize) { objectToSynchronize.notifyAll() @@ -24,7 +23,7 @@ fun CoroutineScope.launchSynchronously(block: suspend CoroutineScope.() -> T launchCallback() objectToSynchronize.wait() } - throw throwable ?: return result!! + return deferred.getCompleted() } fun launchSynchronously(block: suspend CoroutineScope.() -> T): T = CoroutineScope(Dispatchers.Default).launchSynchronously(block)