什么时候应该避免在scala中使用Future

时间:2015-11-21 12:08:30

标签: scala future

原始问题

  1. 我们应该避免从类方法中返回UserDefaults(suiteName: "group.myapp.test")!.bool(forKey: "FirstLaunch") 吗?未来化方法的成本是多少?

  2. 如果其他方法返回Future怎么办?如果方法只执行简单的计算以保持接口的一致性,我们是否还应该对方法进行预测?

  3. 我想知道未来化方法的开销是什么(如果有的话)?

    修改-1

    在Java Runtime的上下文中,将方法包装到Scala中的Future(如果有的话)的成本/开销是多少?

    我想它至少会为GC生成更多垃圾,但我不确定。

2 个答案:

答案 0 :(得分:4)

没有必要'未来''什么,除非该方法有异步工作要做,即必须等待自己的未来。如果该方法花费太多时间,则调用者始终可以将调用包装为Future。因此,我的结论是,在您确实需要之前,请不要在您的API中使用Future

答案 1 :(得分:4)

当您可能需要Future结果时,几乎不存在这种情况,但应该因为开销而避免使用它。

描述了整个未来的概念here

如果简而言之 - 有ExecutionContext并且它负责所有开销。它接收小封闭并按照自己喜欢的方式运行它们。存在的闭包越多,它应该处理得越多。

每个操作都会为您创建新的Promise,显示为Future每个表示每个mapflatMapfilter等等。每个执行操作(例如forEachonComplete)都不会创建新的Promise,而是在ExecutionContext中注册新的闭包。

所有这些都不是特别重,但如果每个您的方法将返回Future,那么这可能是一个问题。

所以只需遵循合理的极简主义,但如果你需要一些流式计算,通常可以使每一步都异步。