美文网首页
Flutter 异步编程

Flutter 异步编程

作者: StevenHu_Sir | 来源:发表于2019-10-31 10:10 被阅读0次
  • Dart 和 JavaScript 共同点是——单线程,同步代码会阻塞程序。
  • 因此程序里有大量的异步操作,它是用Future 对象来执行相关操作的,并且在async 函数使用 await 关键字时才被执行,直到一个Future操作完成。
  • Future 支持链式操作,可以按顺序执行异步函数

1.Future简介

是一个Future 自身的泛型对象 Future<T>对象。

  • 返回的是一个延迟计算的Future对象
  • 它将要操作的事件放入EventQueue中,在队列中的事件按照先进先出的原则去注意处理,处理完成后将结果返回给Future对象
  • 在这个过程中涉及到了异步和等待 (async不阻塞当前线程 和 await延迟执行 )

async和await

getData() async{
   return await http.get(Uri.encodeFull(url), headers: {"Accept": "application/json"});
}
//然后调用函数来获取结果
String data = getData();

单线程

一旦一个函数开始执行,就必须将这个函数执行完,才能去执行其他函数。
Dart中没有线程的概念,只有isolate,每个isolate都是隔离的,并不会共享内存。一个Dart程序是在Main isolate中的main函数开始,而在Main函数结束后,Main isolate线程开始一个个(one by one)的处理Event Queue中的每一个Event。

效果图

2.Future的使用

future里面有几个函数:
then:异步操作逻辑在这里写。
whenComplete:异步完成时的回调。
catchError:捕获异常或者异步出错时的回调。

void testFuture(){
    Future future = new Future(() => null);
    future.then((_){
      print("then");
    }).catchError((_){
      print("catchError");
    }).whenComplete((){
      print("whenComplete");
    });
  }

2.1常用的Future构造函数

new Future((){
    //  doing something
});

2.2将一个大任务拆成很多小任务一步步执行时,就需要使用到Future.then函数来拆解任务

void main(){
new Future(() => futureTask)  //  异步任务的函数
        .then((m) => "futueTask execute result:$m")  //   任务执行完后的子任务
        .then((m) => m.length)  //  其中m为上个任务执行完后的返回的结果
        .then((m) => printLength(m))
        .whenComplete(() => whenTaskCompelete);  //  当所有任务完成后的回调函数
}

int futureTask() {
    return 21; 
}

void printLength(int length) {
    print("Text Length:$length");
}

void whenTaskCompelete() {
    print("Task Complete");
}

2.3 延迟执行

new Future.delayed(const Duration(seconds: 1), () => futureTask);

相关文章

  • Flutter 异步编程

    Dart 和 JavaScript 共同点是——单线程,同步代码会阻塞程序。 因此程序里有大量的异步操作,它是用F...

  • Flutter 异步编程

    定时器简要使用 async使用 异步查看 在Future结束的时候我们需要进行一系列的操作,then().catc...

  • Flutter 异步编程

    前言 Flutter框架使用的编程语言是 dart. dart中太基础的我就不写了,写点和java不一样的地方。异...

  • Flutter 异步编程

    由于Flutter是单线程的,所以java或原生的coder不要认为flutter的异步是多线程 了解java和j...

  • Flutter 异步编程

    Flutter 架构 Flutter框架分三层Framework,Engine, Embedder Framewo...

  • Flutter异步编程

    单线程异步 一般来说,dart是单线程的,通常我们的flutter代码都是运行在一个线程里,并无主次线程之分,除非...

  • Flutter 异步编程二(isolate、compute)

    Flutter 异步编程一(Future、async、await、completer) 一、书接上文: 上篇讲到我...

  • @@@@@@@@

    \009-享学课堂安卓架构第一期├01 flutter│ ├Dart异步编程(1)-.mp4│ ├Dart异步...

  • flutter-异步编程

    首先看一张Flutter体系结构图: 我们只关注线程相关信息 1、Framework:我们直接接触的层级 2、en...

  • Flutter异步编程: Futures

    重点 Dart代码运行在一个已执行的线程内。 阻塞线程执行的代码能够使程序冻结。 Future对象(Futures...

网友评论

      本文标题:Flutter 异步编程

      本文链接:https://www.haomeiwen.com/subject/mxmzvctx.html