【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需要写在耗时操作之前,表示等待该操作结果

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

相关推荐
getapi7 小时前
flutter底部导航代码解释
前端·javascript·flutter
初遇你时动了情8 小时前
安装fvm可以让电脑同时管理多个版本的flutter、flutter常用命令、vscode连接模拟器
flutter
RichardLai881 天前
[Flutter学习之Dart基础] - 控制语句
android·flutter
louisgeek1 天前
Flutter Channel 通信机制
flutter
浅忆无痕1 天前
Flutter空安全最小必备知识
android·前端·flutter
亚洲小炫风1 天前
flutter 打包mac程序 dmg教程
flutter·macos
亚洲小炫风2 天前
flutter 桌面应用之系统托盘
flutter·系统托盘
亚洲小炫风2 天前
flutter 桌面应用之右键菜单
flutter·桌面端·右键菜单·contextmenu
louisgeek2 天前
Flutter Widget、Element 和 RenderObject 的区别
flutter
顾林海2 天前
Flutter 文本组件深度剖析:从基础到高级应用
android·前端·flutter