Flutter Async 与 Async*

在 Flutter(以及 Flutter 使用的语言 Dart)中,asyncasync*都用于处理异步操作,但它们的用途和使用环境不同。以下是它们之间的区别:

async

  • 目的 :用于定义返回Future的异步函数。
  • 行为async函数异步执行,最终返回单个值(或错误)。你可以在函数内部使用 await 来等待其他异步操作完成。
  • 返回类型 :隐式返回一个Future<T>,其中T是函数返回值的类型。
  • 用例:适用于产生单一结果的一次性操作,例如从 API 获取数据或读取文件。

异步示例:

dart 复制代码
Future< String > fetchData() async {  
  await Future.delayed( Duration (seconds: 2 )); 
  // 模拟延迟  
  return "Hello Wolld!" ;  
}  
  
void main() async {  
  String result = await fetchData();  
  print (result); // 打印: Hello Wolld! 
}

async*

  • 目的 :用于定义一个函数,该函数随时间异步生成一系列值,并返回一个Stream
  • 行为async*函数是一个生成器,它使用关键字一次生成一个值yield。它生成一个可以监听值的流。
  • 返回类型 :隐式返回Stream<T>,其中T是产生的每个值的类型。
  • 用例:非常适合需要随时间产生多个值的场景,例如流数据、循环处理或处理实时更新。

async*的示例:

csharp 复制代码
Stream< int > countDown( int from) async * {  
  for ( int i = from; i >= 0 ; i--) {  
     await Future.delayed( Duration (seconds: 1 )); 
     // 模拟延迟  
     yield i; // 每次产生一个值  
  }  
}  
  
void main() {  
  countDown( 3 ).listen((value) {  
     print (value); // 打印:3、2、1、0(每秒一个)  
  });  
}

这里,countDown是一个async* 返回 的函数Stream<int>yield关键字在每个值可用时将其发送到流。

主要区别

使用哪个?

  • async当您需要执行单个异步任务并返回一个结果(例如,获取单个 API 响应)时使用。
  • async*当您需要随时间异步发出多个值时使用(例如,流式传输传感器数据或生成具有延迟的序列)。

参考文章

相关推荐
用户736004375567 小时前
【Flutter 必备插件】HTTP 封装 dio
flutter
风清云淡_A8 小时前
【Flutter3.8x】flutter从入门到实战基础教程(四):自定义实现一个自增的StatefulWidget组件
前端·flutter
叽哥14 小时前
dart学习第1节: 变量与数据类型 —— 程序的 “基本元素”
flutter
喝拿铁写前端1 天前
Flutter 学习笔记 - 搭建(macOS 版)
前端·flutter
ALLIN1 天前
Mac Flutter fvm 多版本管理安装与常用指令(详细使用)
flutter
梦想改变生活1 天前
《Flutter篇第二章》MasonryGridView瀑布流列表
android·flutter
SoaringHeart2 天前
Flutter小技巧:IM音浪效果实现
前端·flutter
Bryce李小白3 天前
Flutter中实现页面跳转功能
flutter
RaidenLiu3 天前
Flutter 多环境配置:flavor
前端·flutter
忆江南3 天前
Widget 、 Element 和 RenderObject 关系
flutter