为什么在以下程序中在同步之前调用异步功能?

时间:2018-12-23 10:44:18

标签: asynchronous dart async-await dart-pub

showAsync() {
  print('Async Function Call!!');    
}

show() async {
  await showAsync();
  print('all done!!');
}

showSync() {
  print('Sync Function Call!');
}

main(List<String> args) {
  show();
  showSync();
}

输出:

Async Function Call!!
Sync Function Call!
all done!!

1 个答案:

答案 0 :(得分:2)

showAsync函数没有执行任何需要等待的操作,因此仅执行。如果更改为以下内容,将首先打印其他功能:

showAsync() {
  Future.delayed(Duration(seconds: 1), () {
    print('Async Function Call!!');
  });
}

正如Günter在评论中指出的那样:“ 在Dart 1.x中,异步函数会立即暂停执行。在Dart 2中,异步函数会立即同步执行,直到第一次等待或返回为止,而不是立即挂起。”(Dart文档中的引号)。

因此,如果您添加第二个await showAsync(),它将不会在同步调用之前执行。

可在此处获得详细说明:https://www.dartlang.org/tutorials/language/futures