scala “未来.成功(无)”和“未来(无)”之间的区别是什么

5ssjco0h  于 2022-11-29  发布在  Scala
关注(0)|答案(3)|浏览(148)

Future.apply启动异步计算,而Future.successful使用指定的结果创建已完成的Future。
那么Future(None)Future.apply(None))的效率是否低于Future.successful(None)

nnsrf1az

nnsrf1az1#

Future.apply(None)创建异步计算并执行它。这意味着创建了额外的lambda对象并调度了额外的任务(无论是多么微不足道的任务)。
Future.successful(None)只产生已经完成的future,效率更高。

qni6mghb

qni6mghb2#

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

flvtvl50

flvtvl503#

我同意接受的答案,但请检查此链接https://blog.colinbreck.com/future-successful-blocking-your-future-success/
Future.successful并不总是更有效,在某些情况下,最好使用Future调用。

相关问题