433 字
2 分钟
Dart 事件循环
2024-08-04

基本概念#

Dart 的事件循环是一个持续运行的程序,它管理所有的异步操作。它主要由两个队列组成:

  • 微任务队列(Microtask queue
  • 事件队列(Event queue

微任务队列:#

  • 微任务队列用于处理优先级较高的任务。
  • 通常包含由 scheduleMicrotask() 方法调度的任务。
  • 微任务队列中的任务会在当前同步代码执行完毕后立即执行。

事件队列:#

  • 事件队列处理 I/O 事件、计时器、以及其他异步操作。
  • 包含像用户输入、网络请求完成、文件 I/O 操作完成等事件。

事件循环的执行顺序:#

  1. 执行同步代码
  2. 执行微任务队列中的所有任务
  3. 执行事件队列中的一个任务
  4. 重复步骤 2 和 3

代码示例:#

void main() {
  print('开始');

  // 添加一个微任务
  scheduleMicrotask(() {
    print('这是一个微任务');
  });

  // 添加一个事件任务(使用Future)
  Future(() {
    print('这是一个事件任务');
  });

  // 添加另一个微任务
  scheduleMicrotask(() {
    print('这是另一个微任务');
  });

  print('结束');
}

这段代码的输出将会是:

开始
结束
这是一个微任务
这是另一个微任务
这是一个事件任务

解释:

  1. 首先执行同步代码,打印”开始”和”结束”。
  2. 然后执行所有微任务。
  3. 最后执行事件任务。

注意事项#

  • 不要在微任务中执行耗时操作,因为它们会阻塞事件循环。
  • 使用 async / await 可以简化异步编程,但底层仍然使用事件循环。
  • Dart的单线程模型意味着长时间运行的同步操作会阻塞整个程序。
Dart 事件循环
https://blog.lpkt.cn/posts/dart-event-loop/
作者
lollipopkit
发布于
2024-08-04
许可协议
CC BY-NC-SA 4.0