温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - Does Spring-Boot handle Kotlin coroutines apart from WebFlux context?
kotlin spring-boot kotlin-coroutines

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

发布于 2020-03-28 23:39:54

我们正在尝试使用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连接的。

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

查看更多

查看更多

提问者
Nick Shulhin
被浏览
163
Neo 2020-01-31 17:56

如果要在await()不声明suspend函数的情况下进行调用,请将其包装在协程生成器中,如下所示:

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