Kotlin 如何同时运行期货清单?
我试图使用AmazonSimpleEmailServiceAsync.sendEmailAsync来同时发送一批批电子邮件,但由于某些原因,我真的很难找到正确的方法 当我在我的收件人列表中循环时,我正在创造这样的未来Kotlin 如何同时运行期货清单?,kotlin,amazon-ses,Kotlin,Amazon Ses,我试图使用AmazonSimpleEmailServiceAsync.sendEmailAsync来同时发送一批批电子邮件,但由于某些原因,我真的很难找到正确的方法 当我在我的收件人列表中循环时,我正在创造这样的未来 val recipientEmailAddress = it.emailAddress val result: Future<SendEmailResult> = client.sendEmailAsync(SendEmailRequest()
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的好处
正确的方法是什么
我只想做以下几件事:
这在C#等语言中是微不足道的,但我似乎不知道如何使用Kotlin/Java实现。此实现应该已经同时发送所有电子邮件。是的,每个
.get()
都会阻止等待一封特定的电子邮件,但所有的电子邮件都应该在飞行中。如果您不介意在电子邮件发送完成之前阻塞线程,那么这个实现就可以了。如果您在挂起函数中执行此操作,并且需要挂起它,那么您必须进行更改来安排此操作。感谢@MattTimmermans经过进一步调查,似乎是我的数据库更新代码让我感到困惑,因为它正在按顺序更新所有记录以指示成功或失败。我现在可以看到,实际的电子邮件传递是同时运行的。
val resultList = futureList.map { it.get() }