Spring boot 除了WebFlux上下文之外,Spring引导是否处理Kotlin协程?

Spring boot 除了WebFlux上下文之外,Spring引导是否处理Kotlin协程?,spring-boot,kotlin,kotlin-coroutines,Spring Boot,Kotlin,Kotlin Coroutines,我们正在尝试使用Kotlin协程在Spring Boot后端内部进行异步处理 问题是它似乎没有很好地支持它(至少是标准的SpringMVC) 基本上,如果我们有一个执行异步逻辑的函数: fun fetchUsersAsync(): Deferred<Users> { return GlobalScope.async { ... } } 不幸的是,这是不可能的,服务中挂起功能的唯一参考是与WebFlux连接的 有人遇到过同样的情况吗?谢谢。如

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

问题是它似乎没有很好地支持它(至少是标准的SpringMVC)

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

fun fetchUsersAsync(): Deferred<Users> {
    return GlobalScope.async {
            ...
    }
} 
不幸的是,这是不可能的,服务中挂起功能的唯一参考是与WebFlux连接的


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

如果您想调用
await()
而不声明
suspend
函数,请将其包装在协同程序生成器中,如下所示:

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

服务和终结点中的公共函数不应挂起。里面的代码很容易是异步的。我不知道你定义“processUsers()”挂起的主要目的是什么?谢谢你的回复,@Neo!主要思想是wait()调用应该在一个挂起函数中。Spring Boot 2.4.0和Spring 5.3在MVC servlet堆栈中提供了对Kotlin协同路由的支持,因此您可以毫无问题地声明一个挂起函数。在servlet堆栈中使用协同路由时,无需再使用
runBlocking
await()
。这里的更多信息很抱歉迟了回复:类似的方法有效,谢谢!
@Service
class MyService {
    fun processUsers(): Users {
        return runBlocking { fetchUsersAsync().await() }
    }
}