Dart15.异步-scheduleMicrotask()

本文详细解析了Dart语言中微任务与Future的执行机制与顺序,通过具体代码示例展示了不同类型的异步操作如何在事件循环中被调度与执行。

ex:

import 'dart:async';
void main(){
  testScheduleMicrotask();
}
void testScheduleMicrotask(){
  scheduleMicrotask(() => print('s1'));//微任务

  new Future.delayed(new Duration(seconds: 1), () => print('s2'));//延迟执行

  new Future(() => print('s3'))
      .then((_) {print('s4');scheduleMicrotask(() => print('s5'));})
      .then((_) => print('s6'));

  new Future(() => print('s7'));

  scheduleMicrotask(() => print('s8'));//微任务

  print('s9');
}

打印如下:

D:\flutter\bin\cache\dart-sdk\bin\dart.exe --enable-asserts --enable-vm-service:43056 D:\Code\Flutter\FlutterHello\flutter_app\lib\loop2.dart
lib/loop2.dart: Warning: Interpreting this as package URI, 'package:flutterapp/loop2.dart'.
Observatory listening on http://127.0.0.1:43056/M_-nfYmRckg=/

s9
s1
s8
s3
s4
s6
s5
s7
s2

Process finished with exit code 0

事件执行的顺序如下:

1.先执行main中的代码,再执行事件队列中的代码print('s9'),也就是先打印s9

2.s1和s8在微任务队列中,优先执行,打印s1s8

3.new Future中的微队列优先级虽然高,但是其属于Future中的微队列需要将Future处理了再处理微队列中的消息,因此打印是s3s4,后面的then是new Future中的一部分因此之后也会执行s6,后面执行s5,后面再打印s7,最后打印延时的s2

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值