在example on dart.dev中,Future在完成主要功能后打印消息。
完成主要功能后,为什么Future会工作?乍一看,主要功能完成后,程序的整个工作有望完成(并且必须取消Future)。
示例代码:
Future<void> fetchUserOrder() {
// Imagine that this function is fetching user info from another service or database.
return Future.delayed(Duration(seconds: 2), () => print('Large Latte'));
}
void main() {
fetchUserOrder();
print('Fetching user order...');
}
程序打印
Fetching user order...
Large Latte
我期望以下内容
Fetching user order...
答案 0 :(得分:0)
这与期货和异步编程的性质有关。在后台,Dart管理着一种称为异步队列的东西。当您启动未来时(无论是像手动操作Future.delayed
一样手动执行,或者通过调用标记为async
的方法隐式执行),只要延迟执行该函数,该函数的执行就会进入队列。处于空闲状态时,它将检查队列中的期货,以查看是否不再有任何期货被阻止,如果有,则恢复执行。
当期货处于队列中时,Dart程序不会终止。它将等待它们全部完成或出错。