【发布时间】:2016-12-11 07:37:49
【问题描述】:
我只是想了解 Futures 的行为。这是一个示例代码:
import'dart:async';
main() {
Future short = shortWait();
Future medium = mediumWait();
Future long = longWait();
long.then((String e)=>print(e));
medium.then((String e)=> print(e));
short.then((String e)=> print(e));
}
Future<String> longWait() {
Completer c = new Completer<String>();
for (int i=0; i<100000000; i++); // creating long latency
c.complete("long");
return c.future;
}
Future<String> mediumWait() {
Completer c = new Completer<String>();
for (int i=0; i<10000; i++); // creating medium length latency
c.complete("medium");
return c.future;
}
Future<String> shortWait() {
Completer c = new Completer<String>();
c.complete("short"); // no latency
return c.future;
}
// short
// medium
// long
我注意到了一些事情。首先,代码似乎是同步的,而延迟最长的函数 longWait() 是阻塞的。直到所有内容都可用时才会显示输出,然后一次显示所有内容。我认为它应该首先显示任何可用的内容,然后在 Futures 完成时显示。
其次,显示顺序似乎反映了 Future short/medium/long = shortWait/mediumWait/longWait() 的显示顺序。即更改这些行的顺序,输出的顺序也会相应更改。每种方法的延迟时间有多长并不重要,也不会影响 short/medium/long.then((e) => print(e)) 的显示顺序。
我希望代码 1) 在数据可用时显示输出,以及 2) 输出顺序应该反映函数的延迟。除了理解 Futures 的基本概念之外,我实际上并没有尝试做任何事情。
【问题讨论】: