个人理解:completer与future的不同在于
completer可以自己决定何时完成这个异步操作,只有调用completer.complete(),这个异步操作才算完成。
future的完成取决于内部代码何时完成
import 'dart:async';
import 'dart:io';
void main() async {
Completer<int> completer;
print('main begin');
var t = await test();
print('t:$t');
var d = await demo(completer);
print("d:$d");
var d2 = await demo2();
print("d2:$d2");
print('main end');
}
Future<int> test() async {
print('test begin');
await sleep(Duration(seconds: 1));
print('test end');
return 1;
}
Future<int> demo(Completer completer) {
completer = Completer<int>();
int sum = 0;
for (int i = 0; i <= 100; i++) {
sum += i;
if (i == 50) {
completer.complete(sum);
}
}
return completer.future;
}
demo2() async {
int sum = 0;
for (int i = 0; i <= 100; i++) {
sum += i;
}
return sum;
}
输出:
main begin
test begin
test end
t:1
d:1275
d2:5050
main end