Dart线程模型及异常捕获
2021-08-04 本文已影响0人
愿你我皆是黑马
单线程
以类似JS的,单线程中是以消息循环机制来运行的。包含一个微任务队列 ,和一个事件队列。微任务队列的执行优先级高于事件队列。

Dart线程运行过程
main() 执行后,启动消息循环机制。按照先进先出的顺序执行微任务队列和事件任务队列中的任务,执行完毕后程序便会退出。
在Dart中,微任务通常来源于Dart内部。所有的外部事件任务都在事件队列中,如IO、计时器、点击、以及绘制事件等。
可以通过Future.microtask(…)方法向微任务队列插入一个任务。
添加事件
new Future(() {
// 事件任务
});
5秒后添加一个事件
//如果该任务前面有其它任务执行,则实际该任务被执行的时间会大于5秒
new Future.delayed(const Duration(seconds:5), () {
// 事件任务
});
new Future(() => doTask) // 执行异步任务
.then((result1) => doChildTask1(result1)) // doTask执行完后的子任务,result为上个任务doTask的返回值
.then((result2) => doChildTask2(result2)) // doChildTask1执行完后的子任务,result为上个任务doChildTask1的返回值
.whenComplete(() => doComplete); // 当所有任务完成后的回调函数
Dart异常捕获
在队列中的任务执行时,当某个任务发生异常并没有被捕获时,并不会退出,而是当前任务的后续代码不会执行,一个任务的异常是不会影响其它任务的。
所以如下的异常时捕获不到的