假設我有以下代碼:Scala Future和TimeoutException:如何知道根本原因?
val futureInt1 = getIntAsync1();
val futureInt2 = getIntAsync2();
val futureSum = for {
int1 <- futureInt1
int2 <- futureInt2
} yield (int1 + int2)
val sum = Await.result(futureSum, 60 seconds)
現在假設的getIntAsync1
或getIntAsync2
一個需要很長的時間,它會導致Await.result
拋出異常:
Caused by: java.util.concurrent.TimeoutException: Futures timed out after [60 seconds]
我怎麼知道哪一個getIntAsync1
或getIntAsync2
仍然未決,實際上導致超時?
請注意,我在這裏匯合2個期貨拉鍊,這是問題的一個簡單的例子,但在我的應用我有這種代碼在不同的水平(即getIntAsync1
本身可以使用Future.zip
或Future.sequence
,地圖/ flatMap/applicative)
不知何故,當我的主線程發生超時時,我能夠記錄掛起的併發操作堆棧跟蹤,以便我可以知道我的系統上的瓶頸在哪裏。
我有一個現有的遺留API後端,這是不完全反應,但不會這麼快。我試圖通過使用併發來增加響應時間。但是,自從使用這種代碼之後,理解爲什麼在我的應用程序中需要花費很多時間纔會變得更加痛苦。如果您能提供幫助我調試此類問題的任何提示,我將不勝感激。
什麼是結果? –
我認爲它應該是'futureSum' –
什麼時候既不是int1也不是int2,而是通過收益創造的新未來 – Lambder