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

dfty9e19  于 2022-11-16  发布在  Kotlin
关注(0)|答案(1)|浏览(184)

我有一个服务,它发送消息给多个用户。我调用发送方法在for-each周期,我想并行这个操作,而不等待结果。我写了一些代码,但我需要你的意见,如果我实现它正确。使用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调用
KotlinPlayground:单击此处

iyfjxgzm

iyfjxgzm1#

我只是想指出你的代码的几个部分。
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。

相关问题