我目前有這個示例代碼,但問題是slowFunction()下面根本沒有運行。
是否可以在上一項的函式呼叫回傳后觸發下一個函式呼叫?只要該函式至少為每個專案執行一次,這并不重要,但認為這將有助于減輕系統負載。
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
import scala.util.{Failure, Success}
val inputsFromDb = Future { Seq(1, 2, 3) }
def slowFunction(input: Int): Future[Boolean] = {
Future {
Thread.sleep(1000)
println(s"Returning from slow function for input $input")
true
}
}
val results: Future[Boolean] = inputsFromDb.flatMap { inputs =>
val updateResults = inputs.map { input =>
println(s"Calling slow function for input $input")
slowFunction(input)
}
Future.sequence(updateResults).map(_ => true)
}
results // Future(<not completed>)
如果我按原樣運行代碼,這是輸出。
Calling slow function for input 1
Calling slow function for input 2
Calling slow function for input 3
但是當我注釋掉睡眠部分時它運行良好 Thread.sleep(1000)
Calling slow function for input 1
Calling slow function for input 2
Calling slow function for input 3
Returning from slow function for input 3
Returning from slow function for input 2
Returning from slow function for input 1
如果我不能讓它作業,我可能只是在每次呼叫slowFuction之間添加一個延遲,使用 java.util.Timer
uj5u.com熱心網友回復:
看起來您的程式(或作業表)在所有Futures 完成之前終止。
如果在程式退出之前的某個時刻,您的代碼會產生預期的輸出,Await直到results完成。
import scala.concurrent.duration._
scala.concurrent.Await.result(results, 999.millis)
如本次 Scastie 會議所示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/312797.html
標籤:斯卡拉
