Kotlin 如何同时运行期货清单?

Kotlin 如何同时运行期货清单?,kotlin,amazon-ses,Kotlin,Amazon Ses,我试图使用AmazonSimpleEmailServiceAsync.sendEmailAsync来同时发送一批批电子邮件,但由于某些原因,我真的很难找到正确的方法 当我在我的收件人列表中循环时,我正在创造这样的未来 val recipientEmailAddress = it.emailAddress val result: Future<SendEmailResult> = client.sendEmailAsync(SendEmailRequest()

我试图使用AmazonSimpleEmailServiceAsync.sendEmailAsync来同时发送一批批电子邮件,但由于某些原因,我真的很难找到正确的方法

当我在我的收件人列表中循环时,我正在创造这样的未来

val recipientEmailAddress = it.emailAddress

val result: Future<SendEmailResult> = client.sendEmailAsync(SendEmailRequest()
                                            .withMessage(message)
                                            .withDestination(Destination()
                                                    .withToAddresses(recipientEmailAddress))
                                            .withSource("sender@mydomain.com")
                                    , object: com.amazonaws.handlers.AsyncHandler<SendEmailRequest,SendEmailResult> {
                                        override fun onError(e: Exception?) {
                                            LOG.error("Error sending email.", e)
                                            failedList.add(it)
                                        }

                                        override fun onSuccess(request: SendEmailRequest, result: SendEmailResult?) {
                                            LOG.debug("Successfully sent email $recipientEmailAddress")
                                            successList.add(it)
                                        }
                                    });

futureList.add(result);
问题是,这不会同时运行调用,每次调用.get()都会阻塞,直到有结果为止,这意味着它们都是按顺序运行的,这否定了使用sendEmailAsync的好处

正确的方法是什么

我只想做以下几件事:

  • 为每个收件人调用sendEmailAsync
  • 同时运行所有调用
  • 等待全部完成
  • 我不认为我需要(或想要)使用多个线程。我不需要并行处理,我只希望对Amazon SES的调用同时发生


    这在C#等语言中是微不足道的,但我似乎不知道如何使用Kotlin/Java实现。

    此实现应该已经同时发送所有电子邮件。是的,每个
    .get()
    都会阻止等待一封特定的电子邮件,但所有的电子邮件都应该在飞行中。如果您不介意在电子邮件发送完成之前阻塞线程,那么这个实现就可以了。如果您在挂起函数中执行此操作,并且需要挂起它,那么您必须进行更改来安排此操作。感谢@MattTimmermans经过进一步调查,似乎是我的数据库更新代码让我感到困惑,因为它正在按顺序更新所有记录以指示成功或失败。我现在可以看到,实际的电子邮件传递是同时运行的。
    val resultList = futureList.map { it.get() }