📜  在Dart使用 await async

📅  最后修改于: 2021-09-02 05:21:54             🧑  作者: Mango

Dart中的asyncawait方法与其他语言非常相似,这对于以前使用过这种模式的人来说是一个很容易掌握的主题。但是,即使您没有使用 async/await 进行异步编程的经验,您也应该会发现在这里学习很容易。

异步函数:

函数构成了异步编程的基础。这些 async 函数在它们的主体中有 async 修饰符。下面是一个通用异步函数的示例:

调用异步函数,会立即返回 Future 并稍后执行函数体。随着异步函数体的执行,函数调用返回的 Future 将与其结果一起完成。在上面的例子中,调用 demo() 会产生 Future。

您想要异步运行的任何函数都需要添加 async 修饰符。这个修饰符紧跟在函数签名之后,像这样:

Dart
void hello() async {
  print('something exciting is going to happen here...');
}


Dart
void main() async {
  await hello();
  print('all done');
}


Dart
Future delayedPrint(int seconds, String msg) {
  final duration = Duration(seconds: seconds);
  return Future.delayed(duration).then((value) => msg);
}
main() async {
  print('Life');
  await delayedPrint(2, "Is").then((status){
    print(status);
  });
  print('Good');
}


通常,您想要异步运行的函数会有一些昂贵的操作,例如文件 I/O(对 RESTful 服务的 API 调用)。

等待表达式:

Await 表达式使您几乎可以像编写同步代码一样编写异步代码。一般来说,await 表达式的形式如下:

Dart

void main() async {
  await hello();
  print('all done');
}

通常,它是一个异步计算,预计将评估为 Future。 await 表达式对 main函数求值,然后挂起当前运行的函数直到结果准备好——也就是说,直到 Future 完成。 await 表达式的结果是 Future 的完成。

  • 关于上面的代码块,有两件重要的事情需要掌握。首先,我们在 main 方法上使用 async 修饰符,因为我们将异步运行 hello()函数。
  • 其次,我们将 await 修饰符直接放在我们的异步函数前面。因此,这通常被称为异步/等待模式。
  • 请记住,如果您要使用 await,请确保调用者函数和您在该函数调用的任何函数都使用async修饰符。

期货:

Dart是一种单线程编程语言。 Future 对象表示产生 T 类型结果的异步操作的结果。如果结果不是可用值,则未来的类型是 Future。 Future 异步表示单个值,数据或错误

有两种处理期货的方法:

  • 使用 Future API
  • 使用 async 和 await 操作。

现在,让我们编写一个程序并查看输出。

例子:

Dart

Future delayedPrint(int seconds, String msg) {
  final duration = Duration(seconds: seconds);
  return Future.delayed(duration).then((value) => msg);
}
main() async {
  print('Life');
  await delayedPrint(2, "Is").then((status){
    print(status);
  });
  print('Good');
}

输出-

Life
Is
Good

在这种情况下,我们使用了 async 和 await 关键字。 Await 基本上持有控制流,直到操作完成。要在函数使用 await,我们必须通过 async 关键字标记该函数。这意味着,这个函数是一个异步函数。

结合 Futures 类, Dart的 async/await 模式是一种强大且富有表现力的异步编程方式。