2014-12-05 72 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