我最近与同事讨论了 ScalaTest 中 ScalaFutures 的 whenReady 或 .futureValue 与测试中的 Await.result 的使用。除了可读性、配置一致性(超时)和使用 whenReady 时的结果范围之外,使用 ScalaFutures 方法比 Await.result 是否还有其他明显的优势?
我注意到 ScalaFutures 使用“轮询”技术而不是像 Await 那样阻塞,但是有人可以详细说明其优点吗?
最佳答案
当您使用 Await.result
时,您将阻塞调用线程。如果您以单线程方式运行测试(例如,使用类似 parallelExecution in Test := false
的 SBT 设置),这种效果将最为明显。
ScalaFutures 完成的轮询是通过调度程序完成的 (afaik);因此,它不会阻塞任何线程。因此,您可能有许多并发运行的测试,远远超过测试实际运行的任何 ExecutionContext 上可用的线程数。
关于scala - 使用 ScalaTest 中的 ScalaFutures 与 Await.result 的优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27319697/