之间的性能差异是什么:
var completer = new Completer<String>();
var future = completer.future;
completer.complete("value");
return future;
和
var future = new Future<String>.immediate("value");
return future;
答案 0 :(得分:3)
希望很快Future.immediate
将使用引擎盖下的完成程序使其异步,因此现在任何性能差异都会消失。
即使在今天,任何这样的性能差异都应该非常小。 Completer和Future中的所有代码都是同步和小的,因此开销包括一个Completer的分配和一些方法调用。那应该是非常非常快的。
Upshot:坚持完成。
答案 1 :(得分:0)
new Future.immediate()和Completer.complete()都返回Future,其值为下一个事件循环中可用的值。 (这是使用新的Timer(0,回调)实现的,请参阅future_impl.dart)
例如,这两个语句的行为相同:
new Future.immediate('blah').then(print);
Completer..complete('blah').future.then(print);
DartVM和dart2js应该能够优化两个示例之间的任何性能差异。所以使用Future.immediate(),它更短。
注意:正如上面提到的Justin,Future.immediate()曾经是同步的,现在不再是这种情况了。