dart - Dart 中的 async 和 async* 有什么区别?

标签 dart flutter

我正在使用 flutter 框架制作应用程序。 在此期间,我遇到了 Dart asyncasync* 中的关键字。 谁能告诉我它们有什么区别?

最佳答案

简答

  • 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/

相关文章:

flutter - Flutter-如何在键盘上使用推荐的单词功能

flutter - 如何使用DIO设置 flutter POST方法?

swift - Flutter Desktop : Firebase Auth could not find a valid GoogleService-Info. plist

flutter - 扩展一个小部件真的是一种反模式吗?

json - Flutter 如何在本地保存列表数据

dart - Dart2JS 如何将 Dart 函数转换为 JS 函数?

dart - Map Assignments [] 和 putifabsent 这两个有区别吗?

Dart Angular 2 和 Material Design 组件

dart - 使用 "where"在 dart 中搜索特定对象的对象列表

flutter - 如何在Flutter Web应用程序上更改图标