Dart中的async和await方法与其他语言非常相似,这对于以前使用过这种模式的人来说是一个很容易掌握的主题。但是,即使您没有使用 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
有两种处理期货的方法:
- 使用 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 模式是一种强大且富有表现力的异步编程方式。