2014-12-05 74 views
8

我最近與同事們討論了ScalaTest中的ScalaFutures和測試中的Await.result的使用或whenReady或.futureValue。除了可讀性,配置(超時)的一致性以及使用whenReady時的結果範圍,除了使用ScalaFutures方法還有其他比Await.result更顯着的優勢嗎?從ScalaTest和Await.result使用ScalaFutures的優勢

我注意到ScalaFutures使用「輪詢」技術而不是像Await那樣阻塞,但有人可以詳細說明優點嗎?

+0

你在這發現了什麼嗎?我也想知道每個 – gnorsilva 2015-03-14 08:44:24

+0

有什麼優點/缺點不是,我認爲這主要是我所說的,當使用whenReady對我來說最有用的時候,超時配置和變量範圍的一致性。 – jgagnon1 2015-03-16 12:44:18

回答

0

當您使用Await.result時,您將阻止調用線程。如果您以單線程方式運行測試(例如,使用類似於parallelExecution in Test := false的SBT設置),則此效果最爲明顯。

ScalaFutures完成的輪詢通過調度程序完成(afaik);因此,它不會阻塞任何線程。因此,您可以擁有大量併發運行的測試,這些測試遠遠超出了測試實際運行的任何ExecutionContext上可用的線程。

+0

'futureValue'的默認實現在指定的時間間隔內使用Thread.sleep,該時間間隔阻塞了線程。 – 2017-02-01 04:55:19