我正在使用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 给你一个 Futureasync*给你一个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,以及参考:)