Dart的async与await示例代码

await一个变量时,会暂停执行并返回;await一个函数时,该函数是继续执行的,直至在该函数中遇到下述情况之一时才暂停执行该函数并返回:

  • 函数中出现 await 表达式时。
  • 函数中出现 return 语句时。
  • 函数体结束。

示例代码一

给出两段示例代码,看看是否理解。片段1:

import 'dart:io';

Future<void> TestDart() async{
  print("TestDart Begin");
  functionA();
  functionB();
  print("TestDart End");
}

Future<void> functionA() async{
  print('functionA Begin');
  await "";
  print('functionA End');
}

Future<void> functionB() async{
  print('functionB Begin');
  await "";
  print('functionB End');
}

void main(){
  print('main Begin');
  TestDart();
  print('main End');
}

执行结果:

main Begin
TestDart Begin
functionA Begin
functionB Begin
TestDart End
main End
functionA End
functionB End

片段2只在functionA()前加了await

import 'dart:io';

Future<void> TestDart() async{
  print("TestDart Begin");
  await functionA();
  functionB();
  print("TestDart End");
}

Future<void> functionA() async{
  print('functionA Begin');
  await "";
  print('functionA End');
}

Future<void> functionB() async{
  print('functionB Begin');
  await "";
  print('functionB End');
}

void main(){
  print('main Begin');
  TestDart();
  print('main End');
}

执行结果:

main Begin
TestDart Begin
functionA Begin
main End
functionA End
functionB Begin
TestDart End
functionB End

示例代码二

then()并不会阻塞当前函数的执行,请看下面的示例代码。

void TestDart() async{
  print("TestDart Begin");
  functionA().then((value){
    print("functionA End");
    return value;
  });
  print("TestDart End");
}

Future<bool> functionA() async{
  print('functionA Begin');
  return false;
}

void main() async{
  print('main Begin');
  TestDart();
  print('main End');
}

执行结果:

main Begin
TestDart Begin
functionA Begin
TestDart End
main End
functionA End

可见functionA End输出在了最后。

如果想要functionA End输出在TestDart Begin与TestDart End中间,类似顺序执行的效果,则要等待functionA()结束,在functionA()前加await即可。

void TestDart() async{
  print("TestDart Begin");
  await functionA().then((value){
    print("functionA End");
    return value;
  });
  print("TestDart End");
}

Future<bool> functionA() async{
  print('functionA Begin');
  return false;
}

void main() async{
  print('main Begin');
  TestDart();
  print('main End');
}

执行结果:

main Begin
TestDart Begin
functionA Begin
main End
functionA End
TestDart End

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注