Flutter Async 与 Async*

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

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*当您需要随时间异步发出多个值时使用(例如,流式传输传感器数据或生成具有延迟的序列)。

参考文章

相关推荐
2501_9445215914 小时前
Ramda 跨端三方库仓颉适配全流程
开发语言·javascript·flutter·php
大龄秃头程序员21 小时前
Flutter 架构里总被混淆的 IoC、DI、Service Locator,到底是什么关系?
flutter
事圆则缓1 天前
Flutter 与原生交互的最后一层:RTC 视频帧怎么走
flutter·音视频·实时音视频
2601_949847751 天前
jose 跨端三方库仓颉适配全流程
前端·javascript·flutter
2601_949970691 天前
msgpackr 跨端三方库仓颉适配全流程
前端·javascript·flutter
2601_949970692 天前
HumanizeDuration 跨端三方库仓颉适配全流程
前端·javascript·flutter
传奇开心果编程2 天前
【Flutter踩坑排雷】第3课:const 误用坑|const 错误使用引发 UI 异常与性能损耗
flutter·移动开发·跨平台·dart·编程语言理论·编程框架·声明式ui
程序员老刘2 天前
你的Flutter项目要不要紧急升级3.47.8?
flutter·客户端
Talyra422 天前
不想开会员,我写了一个记账 App
flutter
2601_949575862 天前
JSON5 跨端三方库仓颉适配全流程
前端·javascript·flutter