Spring-Boot 是否处理 WebFlux 上下文之外的 Kotlin 协程?

Does Spring-Boot handle Kotlin coroutines apart from WebFlux context?

我们正在尝试使用 Kotlin 协程在 Spring- 启动后端内部进行异步处理。

问题是它似乎不能很好地支持它(至少是标准 Spring MVC)。

基本上,如果我们有一个执行异步逻辑的函数:

fun fetchUsersAsync(): Deferred<Users> {
    return GlobalScope.async {
            ...
    }
} 

并且此函数在服务中的某个点与await一起使用,这需要在调用服务函数中放置suspend注释:

@Service
class MyService {
    suspend fun processUsers(): Users {
        return fetchUsersAsync().await()
    }
}

不幸的是,这是不可能的,服务中暂停功能的唯一参考是与 WebFlux 连接。

有人遇到过同样的情况吗?谢谢。

如果您想在不声明 suspend 函数的情况下调用 await(),请将其包装在协程构建器中,如下所示:

@Service
class MyService {
    fun processUsers(): Users {
        return runBlocking { fetchUsersAsync().await() }
    }
}