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() }
}
}
我们正在尝试使用 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() }
}
}