“Future.successful(None)”和“Future(None)”之间的区别是什么?

时间:2014-01-30 20:18:37

标签: scala future

Future.apply启动异步计算,而Future.successful使用指定的结果创建已完成的Future。

现在Future(None)Future.apply(None))效率低于Future.successful(None)

2 个答案:

答案 0 :(得分:45)

Future.apply(None)创建异步计算并执行它。这意味着创建了额外的lambda对象并安排了额外的任务(无论多么简单的任务)。

Future.successful(None)只生产已经完成的未来。效率更高。

答案 1 :(得分:3)

我不认为Future(None)给出了很大的开销,但仍然在它的默认实现中,每次调用apply都会为ForkJoin线程池产生一个新任务,而Future.successful(None)完成立即。并且对未来的每个mapflatMap调用都会为轮询创建一个新任务,这也会产生一些开销,因此您可能需要查看scalaz未来/任务实现更仔细地处理这些细节。