我有一个类似的代码:未来呼唤Scala中的理解 - 我如何顺序处理它们?
for (n <- 1 to 1000) {
someFuture map {
// some other stuff
}
这是一个代码基本部件和工作正常。但是,somefuture
会对数据库执行一些查询,并且数据库不能并行接收多个查询,而这正是之前发生的情况(它会产生大量执行somefuture
的线程,正如人们所期望的那样)。理想情况下,我希望顺序执行(即当n = 1时调用someFuture
,做一些处理,当n = 2时调用someFuture
,做一些处理等)。我想过使用一些阻止方法(从Await
),但这发生在一个演员内部,所以阻止不是一个好主意。另一个想法是创建一个固定的线程池为这个特定的未来呼叫,但听起来像矫枉过正。我该怎么做呢?
更新:我发现this answer,它建议创建一个固定的线程池,因为我认为。不过,这是做这件事的正确方法吗?
查询发生在'someFuture'中,因此'''''''''''''Future'里面有什么并不重要,对吧? –
是的,如果查询在someFuture中运行,那么它意味着即使在涉及scala的for comprehension块之前,所有的查询执行都已被触发。因此,在你的情况下,你必须在理解块之前将查询发送给你的演员。 –