异步

Dart的事件循环的运行遵循以下规则:

  • 首先处理所有微任务队列里的微任务。
  • 处理完所有微任务以后。从事件队列里取1个事件进行处理。
  • 回到微任务队列继续循环。

那么在Dart中如何让你的代码异步执行呢?很简单,把要异步执行的代码放在微任务队列或者事件队列里就行了。

1. Future

Future提供了一系列构造函数供你选择。
创建一个立刻在事件队列里运行的Future:

Future(() => print('立刻在Event queue中运行的Future'));

创建一个延时1秒在事件队列里运行的Future:

Future.delayed(const Duration(seconds:1), () => print('1秒后在Event queue中运行的Future'));

创建一个在微任务队列里运行的Future:

Future.microtask(() => print('在Microtask queue里运行的Future'));

创建一个同步运行的Future:

Future.sync(() => print('同步运行的Future'));

这个同步运行指的是构造Future的时候传入的函数是同步运行的,这个Future通过then串进来的回调函数是调度到微任务队列异步执行的。

2. Completer

当你创建了一个Completer以后,其内部会包含一个Future。你可以在这个Future上通过then, catchError和whenComplete串上你需要的回调。拿着这个Completer实例,在你的代码里的合适位置,通过调用complete函数即可完成这个Completer对应的Future。控制权完全在你自己的代码手里。当然你也可以通过调用completeError来以异常的方式结束这个Future。

3. async/await

用同步代码的形式写出异步代码

  • await只能在async函数中出现。
  • async函数中可以出现多个await,每遇见一个就返回一个Future, 实际结果类似于用then串起来的回调。
  • async函数也可以没有await, 在函数体同步执行完毕以后返回一个Future。

Flutter/Dart中的异步

你可能感兴趣的:(异步)