我正在使用 flutter 框架制作应用程序。
在此期间,我遇到了 Dart async
和 async*
中的关键字。
谁能告诉我它们有什么区别?
最佳答案
简答
async
给你一个Future
async*
为您提供Stream
。
异步
您将 async
关键字添加到执行某些可能需要很长时间的工作的函数中。它返回包装在 Future
中的结果。
Future<int> doSomeLongTask() async {
await Future.delayed(const Duration(seconds: 1));
return 42;
}
您可以通过等待 Future 获得该结果:
main() async {
int result = await doSomeLongTask();
print(result); // prints '42' after waiting 1 second
}
异步*
您添加 async*
关键字来创建一个函数,该函数一次返回一堆 future 值。结果被封装在一个 Stream 中。
Stream<int> countForOneMinute() async* {
for (int i = 1; i <= 60; i++) {
await Future.delayed(const Duration(seconds: 1));
yield i;
}
}
对此的技术术语是asynchronous generator function .你使用 yield
来返回一个值而不是 return
因为你没有离开这个函数。
您可以使用 await for
来等待 Stream 发出的每个值。
main() async {
await for (int i in countForOneMinute()) {
print(i); // prints 1 to 60, one integer per second
}
}
进行中
观看这些视频以了解更多信息,尤其是关于发电机的视频:
关于dart - Dart 中的 async 和 async* 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55397023/