Asynchronous 异步/等待-在future()之前不等待-Dart

Asynchronous 异步/等待-在future()之前不等待-Dart,asynchronous,dart,async-await,flutter,Asynchronous,Dart,Async Await,Flutter,使用时基于Dart官方页面: 当应用程序看到单词async时,它会正常同步执行函数,直到看到wait或return 请注意,异步函数立即开始执行 (同步地)。函数暂停执行并返回 未完成的未来,当它达到任何 以下: 函数的第一个等待表达式(在函数获取 未完成的未来(来自该表达式) 函数中的任何返回语句 函数体的末尾 当它看到它们中的任何一个时,它返回一个未完成的Future,并停止执行async函数,直到它执行所有其他函数,当所有其他函数都执行时,应用程序返回到async函数并执行其中的内容

使用时基于Dart官方页面:

当应用程序看到单词
async
时,它会正常同步执行函数,直到看到
wait
return

请注意,异步函数立即开始执行 (同步地)。函数暂停执行并返回 未完成的未来,当它达到任何 以下:

  • 函数的第一个等待表达式(在函数获取 未完成的未来(来自该表达式)
  • 函数中的任何返回语句
  • 函数体的末尾
当它看到它们中的任何一个时,它返回一个未完成的
Future
,并停止执行
async
函数,直到它执行所有其他函数,当所有其他函数都执行时,应用程序返回到
async
函数并执行其中的内容

下面是Dart官方页面上的一张照片,详细解释了这一点:

但当我测试时,我试图在返回未来结果之前添加一条
打印
语句,正如您在下面的代码中看到的,但结果与网站中所述不同,因为它说应用程序在看到单词
wait
时停止执行,但语句是:“Async-Hi Called 1st”如您所见,在执行其他功能之前已打印。

import 'dart:async';

Future<void> print1stAsync() async {
  var test = await callAsync();
  print(test);
}

main() {
  print1stAsync();
  print2nd();
  print3rd();
  print4th();
}

print2nd() {
  print('Called 2nd');
}

print3rd() {
  print("Called 3rd");
}

print4th() {
  print('Called 4th');
}

Future<String> callAsync() {
  print("Async - Hi Called 1st");
    return Future(() => "Async - Called 1st ");
  }

那么为什么会发生这种情况呢?我没有理解什么吗?

应用程序没有停止执行,只有
wait
之后的代码执行被延迟,直到返回的
Future
完成

您还需要等待对异步函数的调用
print1stAsync()
,否则
main
的执行将在调用
callAsync()后继续进行(在调用之后,而不是在它返回的
将来的
完成之后)

async
添加到函数也意味着该函数返回
未来的
。
无法从异步返回到同步。异步是有传染性的

wait callAsync()表示同一函数中该行下方的代码(如示例中的
打印(测试);
)将被延迟。

它没有说明callAsync()中的代码或调用
Print1StatSync()的代码

当不返回任何值时,是否可以使用
void
作为返回类型,而不是
Future
,因为我的IDE没有显示任何错误,并且代码在这两种情况下都工作相同。是的,可以。这表示触发并忘记-该函数表示不希望等待它。它很少使用,但它是有效的。我不确定我是否理解你的问题<代码>打印(“异步-Hi称为第一”)立即执行。在执行到达该行之前,不存在等待。当
print1stAsync
中的每个
wait
ed
Future
完成时,从
print1stAsync
返回的
Future
将完成。如果未等待,则
main
中的代码将继续执行等待
printAsync()
中的异步结果。
await callAsync()
表示同一函数中该行下方的代码(如示例中的
打印(测试);
)将被延迟。它没有提到
callAsync()
中的代码,也没有提到调用
print1stAsync
的代码。我现在完全理解了它,这就是神奇的句子“wait没有提到callAsync()中的代码”。非常感谢你。
Async - Hi Called 1st
Called 2nd
Called 3rd
Called 4th
Async - Called 1st 
main() async {
  await print1stAsync();
  print2nd();
  print3rd();
  print4th();
}