我对Kotlin是全新的,来自Java Spring世界。我希望在Kotlin中复制Java功能,即每个请求的正常线程模型。查看下面的Kotlin示例,我发现其中一个方法默认为flow,而其他方法则指定为suspend。我已经阅读了文档,但仍然有点困惑。我有几个问题需要检查我的理解:
- 在Kotlin中强制每个请求一个线程模型有什么好的理由吗?
- 要强制每个请求一个线程模型,所有函数是否都需要是suspend类型?
- 如果我遵循典型的spring范例 *,那么我是否应该关注用类型流标记所有函数?
- 不包括服务类中的状态
@RestController
class UserController(private val userRepository: UserRepository) {
@GetMapping("/")
fun findAll(): Flow<User> =
userRepository.findAll()
@GetMapping("/{id}")
**suspend**fun findOne(@PathVariable id: String): User? =
userRepository.findOne(id) ?:
throw CustomException("This user does not exist")
@PostMapping("/")
**suspend**fun save(user: User) =
userRepository.save(user)
}
1条答案
按热度按时间vsmadaxz1#
在Kotlin中强制每个请求一个线程模型有什么好的理由吗?
没有理由不这样做,而且通常更容易。
要强制每个请求一个线程模型,所有函数是否都需要是suspend类型?
不需要。你可以从挂起函数中调用普通函数,而且很可能会这样做。只是不要阻塞。
如果我遵循典型的spring范例 *,那么我是否应该关注用类型流标记所有函数?
通常,只有当函数实际上执行异步操作(如进行RPC)时,才应将其标记为suspend。