基于Dart官方页面,当使用Async/Wait时:
当应用看到单词async
时,它将正常同步执行该功能,直到看到await
或return
为止
请注意,异步功能立即开始执行 (同步)。该函数暂停执行并返回一个 未完成的未来,当它到达任何一个 以下:
- 该函数的第一个await表达式(在该函数获得 该表达式未完成的未来)。
- 函数中的任何return语句。
- 函数主体的结尾。
,当看到它们中的任何一个时,它将返回未完成的Future
并停止执行async
函数,直到执行所有其他功能为止,并且当所有其他功能都执行时,该应用返回到async
函数并执行其中的内容。
但是,当我测试时,在返回将来的结果之前,我试图添加一个print
语句,如下面的代码所示,但结果并不像站点中所述,这表示该应用一旦看到await
一词便停止执行,但语句:“异步-称为第一的高位调用” 如您所见,在执行其他功能之前就已打印出来。
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 ");
}
输出:
Async - Hi Called 1st
Called 2nd
Called 3rd
Called 4th
Async - Called 1st
那为什么会这样呢?我想念什么吗?
答案 0 :(得分:2)
应用程序不会停止执行,只是延迟await
之后的代码执行,直到返回的Future
完成为止。
您还需要等待对异步函数print1stAsync()
的调用,否则在调用main
之后(在调用之后,而不是在{{1之后)继续执行callAsync();
}}返回完成)
Future
将main() async {
await print1stAsync();
print2nd();
print3rd();
print4th();
}
添加到函数也意味着该函数返回asnyc
。
没有办法从异步返回到同步。异步具有传染性。
Future
表示同一函数(例如您的示例中的await callAsync();
)中该行下方的代码将被延迟。
它没有说有关callAsync()中的代码或调用print(test);