异步/等待-不等待future()-飞镖

时间:2018-11-11 14:48:36

标签: asynchronous dart async-await flutter

基于Dart官方页面,当使用Async/Wait时:

当应用看到单词async时,它将正常同步执行该功能,直到看到awaitreturn为止

  

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

     
      
  • 该函数的第一个await表达式(在该函数获得   该表达式未完成的未来)。
  •   
  • 函数中的任何return语句。
  •   
  • 函数主体的结尾。
  •   

,当看到它们中的任何一个时,它将返回未完成的Future并停止执行async函数,直到执行所有其他功能为止,并且当所有其他功能都执行时,该应用返回到async函数并执行其中的内容。

这是Dart官方页面上的一张照片,对其进行了详细说明:
Dart Image

但是,当我测试时,在返回将来的结果之前,我试图添加一个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 

那为什么会这样呢?我想念什么吗?

1 个答案:

答案 0 :(得分:2)

应用程序不会停止执行,只是延迟await之后的代码执行,直到返回的Future完成为止。

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

Future

main() async { await print1stAsync(); print2nd(); print3rd(); print4th(); } 添加到函数也意味着该函数返回asnyc。 没有办法从异步返回到同步。异步具有传染性。

Future表示同一函数(例如您的示例中的await callAsync();)中该行下方的代码将被延迟。
它没有说有关callAsync()中的代码或调用print(test);

的代码的任何内容