0

性能上有什么区别

var completer = new Completer<String>();
var future    = completer.future;
completer.complete("value");
return future;

var future = new Future<String>.immediate("value");
return future;

?

4

2 回答 2

3

希望很快Future.immediate会在后台使用 Completer 使其异步,因此现在的任何性能差异都会消失。

即使在今天,任何这样的性能差异都应该非常小。Completer 和 Future 中的所有代码都是同步的且很小,因此开销由 Completer 的分配和一些方法调用组成。那应该非常非常快。

结果:坚持使用完成者。

于 2012-11-12T22:34:33.430 回答
0

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() 曾经是同步的,现在不再是这种情况。

于 2013-04-11T21:28:19.317 回答