kotlin - Vert.x编写协程阻止代码的方法

标签 kotlin vert.x

我确实有同时使用协程和Vert.x的项目。

我正在尝试编写包装器函数以在vertx工作线程池上运行阻塞代码

就像是:

suspend inline fun <T> executeOnWorkerThread(crossinline block: () -> T) =
    withContext(**Vertx-Worker-ThreadPool**) {
        block()
    }

所以它可以像
 suspend fun usage(obj: Any): String = executeOnWorkerThread {
            try {
                // blocking code
            } catch (e: Exception) {
                // Exception handling
            }
        }

但这不是vert.x方式。而且我找不到从vert.x中提取线程池的方法

最佳答案

suspend fun <T> awaitBlockingUnordered(block: () -> T): T {
    return awaitResult { handler ->
        val ctx = Vertx.currentContext()
        ctx.executeBlocking<T>(
            { fut -> fut.complete(block()) },
            false,
            { ar -> handler.handle(ar) }
        )
    }
}

关于kotlin - Vert.x编写协程阻止代码的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61954373/

相关文章:

enums - 是否可以在 kotlin 中使用 enum ordinal 而不显式调用 ordinal?

android - Kotlin + Dagger 2 : cannot be provided without an @Provides-annotated method

java - Future 在 Vert.x 中如何工作?

promise - Vert.x 3.8.1+ 中 CompositeFuture 的 Promise 等价物是什么?

java - 异步服务代理调用vertx

java - 在 vert.x 中运行 verticle 的最佳方式是什么?

android - Dagger 2 如何处理不再需要的注入(inject)字段?

Java 函数转换为 Kotlin 失败

ms-access - 使用UCanAccess的MS Access '97 DB的CharSet

netty - 找不到 io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider