【dart线程之怎么处理异步和顺序异步任务队列】

dart线程之怎么处理异步和顺序异步任务队列

单线程的dart怎么处理异步任务的?

  • 事件循环模型就是实现异步处理任务的核心。

关于阻塞式调用和非阻塞式调用的概念

  • 阻塞和非阻塞关注的是程序在等待调用结果(消息、返回值)时的状态
  • 阻塞式调用: 调用结果返回之前,当前线程会被挂起,调用线程只有在得到调用结果之后才会继续执行
  • 非阻塞式调用: 调用执行后,当前线程不会停止执行,只需要过一段时间来检查一下有没有结果返回即可

对于顺序异步怎么实现

通过Future的then链式调用

示例:

复制代码
import 'dart:io';

main(List<String> args) {
  print("main start");
  
  Future((){
    //1.发送第一次请求
    sleep(Duration(seconds:8));
    return "第一次的结果";
  }).then((value){
    print(value);
    //2.发送的第二次请求
    sleep(Duration(seconds:3));
    //return "第二次的结果";
    throw Exception("第二次请求异常");
  }).then((value){
    print(value);
  }).catchError((err){
    print(err);
  }).whenComplete(() => {
    print("代码完成")
  });

  print("main end");
}

通过连续的await

  • await等待该操作结果,所以等待完继续下一个也能实现顺序异步
    示例:

    Future getData() async{
    //1.调用第一次网络请求
    var res1 = await getNetworkData("argument1");
    print(res1);
    var res2 = await getNetworkData(res1);
    print(res2);
    var res3 = await getNetworkData(res2);
    print(res3);
    return res3;
    }

await、async的意义

  • 用同步的代码格式,去实现异步的调用过程
  • await需要写在耗时操作之前,表示等待该操作结果

备注:通过查阅一些资料整理所得,如有错误,烦请指正。

相关推荐
哲科软件7 小时前
跨平台开发的抉择:Flutter vs 原生安卓(Kotlin)的优劣对比与选型建议
android·flutter·kotlin
天涯海风7 小时前
Kuikly 与 Flutter 的全面对比分析,结合技术架构、性能、开发体验等核心维度
flutter·kuikly
aiprtem7 小时前
基于Flutter的web登录设计
前端·flutter
coder_pig11 小时前
跟🤡杰哥一起学Flutter (三十四、玩转Flutter手势✋)
前端·flutter·harmonyos
程序员老刘13 小时前
Android 16开发者全解读
android·flutter·客户端
Jalor14 小时前
Flutter + 鸿蒙 | Flutter 跳转鸿蒙原生界面
flutter·harmonyos
吴Wu涛涛涛涛涛Tao16 小时前
一步到位:用 Very Good CLI × Bloc × go_router 打好 Flutter 工程地基
flutter·ios
九丝城主16 小时前
2025使用VM虚拟机安装配置Macos苹果系统下Flutter开发环境保姆级教程--中篇
服务器·flutter·macos·vmware
ITfeib17 小时前
Flutter
开发语言·javascript·flutter
昱禹17 小时前
Flutter 3.29+使用isar构建失败
大数据·flutter