如何在Kotlin中并行运行多个协同程序而不等待结果



我有一个服务,它向多个用户发送消息。我为每个周期调用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

最新更新