我有一個類似的代碼:未來呼喚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塊之前,所有的查詢執行都已被觸發。因此,在你的情況下,你必須在理解塊之前將查詢發送給你的演員。 –