Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 异步处理电子邮件中的附加文件(Spring Mail集成)_Android_Spring_Email_Android Asynctask_Spring Integration - Fatal编程技术网

Android 异步处理电子邮件中的附加文件(Spring Mail集成)

Android 异步处理电子邮件中的附加文件(Spring Mail集成),android,spring,email,android-asynctask,spring-integration,Android,Spring,Email,Android Asynctask,Spring Integration,如果我有一个带有邮件服务器入站频道的Spring应用程序,那么处理每封电子邮件中的每个文件的最佳方式是什么(我大约每1分钟轮询一次,并获取一封带有多个附件的电子邮件) 虽然我可以在接收通道(SimpleAsynctaskeExecutor或ThreadPoolTaskExecutor)应用多线程,但这并没有多大帮助,因为如果我在一封电子邮件中附加了10个文件,它们的处理几乎绑定到一个线程 到目前为止,我一直保持同步,因为我想为每封电子邮件聚合一些数据,并在处理完所有文件后发送响应。我相信这也可以

如果我有一个带有邮件服务器入站频道的Spring应用程序,那么处理每封电子邮件中的每个文件的最佳方式是什么(我大约每1分钟轮询一次,并获取一封带有多个附件的电子邮件)

虽然我可以在接收通道(SimpleAsynctaskeExecutor或ThreadPoolTaskExecutor)应用多线程,但这并没有多大帮助,因为如果我在一封电子邮件中附加了10个文件,它们的处理几乎绑定到一个线程

到目前为止,我一直保持同步,因为我想为每封电子邮件聚合一些数据,并在处理完所有文件后发送响应。我相信这也可以用更好的方式来实现


一般来说,如何异步处理每封电子邮件中的每个文件,然后再次异步生成电子邮件回复?

看起来像是您要求的。在计算(方法)结果之前,这是一个java核心概念。(参见示例)

Spring也支持未来的概念

因此,您需要做的唯一一件事是使用
@Async
的方法将邮件的一个附件作为参数,并返回将来计算的内容。 您需要为所有附件(异步)调用所有这些方法,并将立即返回的未来存储在列表中。调用所有方法之后。您尝试在新循环中获取特征结果。完成此循环后,所有附件都将异步进行

 processOneMail(List<Attachement> attachments) {
      List<Future<AttachmentResult>> futures = new ArrayList...

      for(Attachment attachment : attachments) {
        futures.add(processOneAttachment(attachment)); //async
      }

      List<AttachmentResult> attachmentResults = new ArrayList...
      for(Future<AttachmentResult>> future : futures) {
         attachmentResults.add(future.get()); //eventually blocks
      }
      //now all attachments are calculated and stored in the list.      
      ...
    }
@Async
Future<AttachmentResult> processOneAttachment(Attachment attachment) {
   ...
}

processOneMail(列表

我认为标题足够清楚,但无论如何,我在问题格式中添加了同样的内容:)一个构成问题的句子应该以
结尾——但现在我(希望其他人)明白了你的要求。是的,对不起,真的。我今天有点紧张