我们正在尝试使用Kotlin协程在Spring-Boot后端内部进行异步处理。
问题在于它似乎不能很好地支持它(至少是标准的Spring MVC)。
基本上,如果我们有一个执行异步逻辑的函数:
fun fetchUsersAsync(): Deferred<Users> {
return GlobalScope.async {
...
}
}
并且此功能与await
服务中的某个点一起使用,这需要suspend
在调用服务的功能中添加注释:
@Service
class MyService {
suspend fun processUsers(): Users {
return fetchUsersAsync().await()
}
}
不幸的是,这是不可能的,并且服务中暂停功能的唯一参考是与WebFlux连接的。
有没有人遇到过同样的情况?谢谢。
如果要在await()
不声明suspend
函数的情况下进行调用,请将其包装在协程生成器中,如下所示:
@Service
class MyService {
fun processUsers(): Users {
return runBlocking { fetchUsersAsync().await() }
}
}
抱歉,您的回复很晚:类似的方法有效,谢谢!