原始问题
我们应该避免从类方法中返回UserDefaults(suiteName: "group.myapp.test")!.bool(forKey: "FirstLaunch")
吗?未来化方法的成本是多少?
如果其他方法返回Future
怎么办?如果方法只执行简单的计算以保持接口的一致性,我们是否还应该对方法进行预测?
我想知道未来化方法的开销是什么(如果有的话)?
修改-1
在Java Runtime的上下文中,将方法包装到Scala中的Future
(如果有的话)的成本/开销是多少?
我想它至少会为GC生成更多垃圾,但我不确定。
答案 0 :(得分:4)
没有必要'未来''什么,除非该方法有异步工作要做,即必须等待自己的未来。如果该方法花费太多时间,则调用者始终可以将调用包装为Future
。因此,我的结论是,在您确实需要之前,请不要在您的API中使用Future
。
答案 1 :(得分:4)
当您可能需要Future
结果时,几乎不存在这种情况,但应该因为开销而避免使用它。
描述了整个未来的概念here
如果简而言之 - 有ExecutionContext
并且它负责所有开销。它接收小封闭并按照自己喜欢的方式运行它们。存在的闭包越多,它应该处理得越多。
每个操作都会为您创建新的Promise
,显示为Future
。 每个表示每个map
,flatMap
,filter
等等。每个执行操作(例如forEach
或onComplete
)都不会创建新的Promise
,而是在ExecutionContext
中注册新的闭包。
所有这些都不是特别重,但如果每个您的方法将返回Future
,那么这可能是一个问题。
所以只需遵循合理的极简主义,但如果你需要一些流式计算,通常可以使每一步都异步。