为什么在完成主要功能后Future可以工作?

时间:2020-08-29 20:23:10

标签: asynchronous dart

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...

1 个答案:

答案 0 :(得分:0)

这与期货和异步编程的性质有关。在后台,Dart管理着一种称为异步队列的东西。当您启动未来时(无论是像手动操作Future.delayed一样手动执行,或者通过调用标记为async的方法隐式执行),只要延迟执行该函数,该函数的执行就会进入队列。处于空闲状态时,它将检查队列中的期货,以查看是否不再有任何期货被阻止,如果有,则恢复执行。

当期货处于队列中时,Dart程序不会终止。它将等待它们全部完成或出错。