All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jvmMain.co.touchlab.stately.isolate.BackgroundStateRunner.kt Maven / Gradle / Ivy

package co.touchlab.stately.isolate

import java.util.concurrent.Callable
import java.util.concurrent.Executors

actual class BackgroundStateRunner : StateRunner {
    internal val stateExecutor = Executors.newSingleThreadExecutor()

    actual override fun  stateRun(block: () -> R): R {
        val result = stateExecutor.submit(Callable {
            try {
                Ok(block())
            } catch (e: Throwable) {
                Thrown(e)
            }
        }).get()

        return when(result){
            is Ok<*> -> result.result as R
            is Thrown -> throw result.throwable
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy