性能上有什么区别
var completer = new Completer<String>();
var future = completer.future;
completer.complete("value");
return future;
和
var future = new Future<String>.immediate("value");
return future;
?
性能上有什么区别
var completer = new Completer<String>();
var future = completer.future;
completer.complete("value");
return future;
和
var future = new Future<String>.immediate("value");
return future;
?
希望很快Future.immediate
会在后台使用 Completer 使其异步,因此现在的任何性能差异都会消失。
即使在今天,任何这样的性能差异都应该非常小。Completer 和 Future 中的所有代码都是同步的且很小,因此开销由 Completer 的分配和一些方法调用组成。那应该非常非常快。
结果:坚持使用完成者。
new Future.immediate()和Completer.complete()都返回一个 Future,其值在下一个事件循环中可用。(这是使用 new Timer(0, callback) 实现的。参见future_impl.dart。)
例如,这两个语句的行为相同:
new Future.immediate('blah').then(print);
Completer..complete('blah').future.then(print);
DartVM 和 dart2js 应该能够优化掉两个示例之间的任何性能差异。所以使用 Future.immediate(),它更短。
注意:正如贾斯汀所说,Future.immediate() 曾经是同步的,现在不再是这种情况。