Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.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
如何在Scala中完成后立即使用期货列表_Scala_Future - Fatal编程技术网

如何在Scala中完成后立即使用期货列表

如何在Scala中完成后立即使用期货列表,scala,future,Scala,Future,我有一系列的期货可以在非常不同的时间完成,比如: val results = task.getAssignedFiles map { file: File => Future[Result] { <heavy computation> } } 您正在寻找。您正在寻找。没有必要“循环”期货列表,以便在期货完成后对其采取行动。方法是连锁经营 所需的使用组合运算的计算序列,并等待它们全部终止 根据上述代码,可写成: val results:List[Future[R

我有一系列的期货可以在非常不同的时间完成,比如:

val results = task.getAssignedFiles map {
  file: File => Future[Result] {
    <heavy computation>
  }
}
您正在寻找。

您正在寻找。

没有必要“循环”期货列表,以便在期货完成后对其采取行动。方法是连锁经营 所需的使用组合运算的计算序列,并等待它们全部终止

根据上述代码,可写成:

val results:List[Future[Result] = task.getAssignedFiles map {
  file: File => Future[Result] {
    <heavy computation>
  }
} 
val processedResults:List[Future[ProcessedResult]] = results.map(result => process(result))
val finalResults:Future[List[ProcessedResult]] = Future.sequence(processedResults)
val结果:列表[Future[Result]=task.getAssignedFiles映射{
file:file=>Future[结果]{
}
} 
val processedResults:List[Future[ProcessedResult]]=results.map(result=>process(result))
val finalResults:Future[List[ProcessedResult]]=Future.sequence(processedResults)
请注意,所有期货都是从定义开始运行的。
序列将在最后一个期货完成时完成。

无需在期货列表上“循环”以在期货完成时对其采取行动。方法是连锁 所需的使用组合运算的计算序列,并等待它们全部终止

根据上述代码,可写成:

val results:List[Future[Result] = task.getAssignedFiles map {
  file: File => Future[Result] {
    <heavy computation>
  }
} 
val processedResults:List[Future[ProcessedResult]] = results.map(result => process(result))
val finalResults:Future[List[ProcessedResult]] = Future.sequence(processedResults)
val结果:列表[Future[Result]=task.getAssignedFiles映射{
file:file=>Future[结果]{
}
} 
val processedResults:List[Future[ProcessedResult]]=results.map(result=>process(result))
val finalResults:Future[List[ProcessedResult]]=Future.sequence(processedResults)


请注意,所有期货都是从定义开始运行的。
序列将在最后一个期货完成时完成。

最好看看反应流impl,比如Akka流。你是说我应该将期货作为输入转换为Akka流吗?我对此没有太多经验,所以任何指针都不会每个完成的未来会发生什么?@maasg我会有类似于future.onComplete{success=>{}failure=>{}没有必要以这种方式对结果进行投票。将未来的计算链接起来应该会得到预期的结果。我已经朝这个方向回答了。最好看看反应流impl,比如Akka流。你是说我应该将我的未来作为输入转换为Akka流吗?我没有太多的经验,所以没有任何指针s将是有用的每个完成的未来会发生什么?@maasg我将有类似于future.onComplete{success=>{}failure=>{}没有必要以这种方式对结果进行投票。将未来的计算链接起来应该会得到预期的结果。我已经朝这个方向回答了。如果我理解正确,OP希望处理未来计算的每个结果,而不仅仅是第一个结果。也许@utsavsha可以澄清。你可以稍后通过编写
firstCompleteOf
结果的顺序列表。如果我正确理解了问题,OP希望处理未来计算的每个结果,而不仅仅是第一个。也许@utsavsha可以澄清。您可以稍后编写
firstCompleteOf
结果的顺序列表。在未来的一个时间完成后,我想确保剩余的工作由同一个线程完成,因为依赖的工作将写入一个大文件。但这些未来将以什么顺序完成并不重要。因此我不想像这样将其链接。@utsavsha可以在未来的上下文中使用适当的锁定来完成写入。最终结果将是同样,逻辑将更容易编写。一旦未来的某个线程完成,我想确保剩余的工作由同一个线程完成,因为依赖的工作将写入一个大文件。但这些未来将完成的顺序无关紧要。因此,我不想像这样将其链接。@utsavsha编写可以在将来的上下文中使用适当的锁定来完成。最终结果将是相同的,而逻辑将更易于编写。