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异常捕获

在队列中的任务执行时,当某个任务发生异常并没有被捕获时,并不会退出,而是当前任务的后续代码不会执行,一个任务的异常是不会影响其它任务的。
所以如下的异常时捕获不到的


捕获所有异常

上一篇 下一篇

猜你喜欢

热点阅读