我有一个服务,它向多个用户发送消息。我为每个周期调用send方法,并希望在不等待结果的情况下并行执行这些操作。我已经写了一些代码,但如果我实现得正确,我需要你的评论。使用Kotlin+Spring 5。
服务A(单例服务(:
fun send(users: List<User>) {
CoroutineScope(Dispatchers.Default).launch {
users.forEach {
launch(SupervisorJob() + MDCContext()) {
val messageText = "Hello, my friend!"
chatMessageSender.send(it, messageText)
}
}
}
}
chatMessageSender-外部服务,通过RestTemplate 调用
Kotlin游乐场:点击这里
我只想指出代码的几个部分。
1-如果你想在发送消息的过程中处理异常,你可以像那样在启动块中使用try-catch。
launch(SupervisorJob() + MDCContext()) {
try{
val messageText = "Hello, my friend!"
chatMessageSender.send(it, messageText)
}catch(e: Throwable){
//message could not be sent to it user
}
}
2-launch(SupervisorJob() + MDCContext())
你真的需要MDCContext吗?我猜你没有用它。
3-也许你可以考虑使用Dispatchers.IO而不是Dispatchers.Default。你可以在这里找到这两者的比较https://medium.com/@bhavnathacker14/用于kotlin-routines-f38527bd94c