我正在使用flutter框架制作应用程序。在此期间,我遇到了Dartasync
和中的关键字async*
。谁能告诉我他们之间有什么区别?
我正在使用flutter框架制作应用程序。在此期间,我遇到了Dartasync
和中的关键字async*
。谁能告诉我他们之间有什么区别?
Answers:
将功能标记为async
或async*
允许其使用async
/await
关键字使用Future
。
两者之间的区别在于,async*
它将始终返回aStream
并提供一些语法糖来通过yield
关键字发出值。
因此,我们可以执行以下操作:
Stream<int> foo() async* {
for (int i = 0; i < 42; i++) {
await Future.delayed(const Duration(seconds: 1));
yield i;
}
}
此函数每秒发出一个值,每次都会递增
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*
关键字以使函数一次返回一堆将来的值。结果包装在Stream中。
Stream<int> countForOneMinute() async* {
for (int i = 1; i <= 60; i++) {
await Future.delayed(const Duration(seconds: 1));
yield i;
}
}
专门的术语是异步发电机功能。您使用yield
返回值代替,而不是return
因为您没有离开函数。
您可以await for
用来等待Stream发出的每个值。
main() async {
await for (int i in countForOneMinute()) {
print(i); // prints 1 to 60, one integer per second
}
}
观看这些视频以了解更多信息,尤其是有关Generators的视频:
Dart Documentation
,以及参考:)