Flutter Future

事件循环(Event Loop)是 Dart(以及其他类似的异步编程环境,如 JavaScript)中的一个核心概念,它使得异步操作成为可能。事件循环负责管理和调度程序中的事件或任务,如 I/O 操作、定时器事件、以及微任务等,确保它们按照适当的顺序执行。

事件队列

  1. 执行栈(Call Stack):同步任务会被放入执行栈中,并立即执行。
  2. 任务队列(Task Queue):异步任务如 FutureTimer 等,会被放入任务队列中。一旦执行栈为空,事件循环就会从任务队列中取出任务执行。
  3. 微任务队列(Microtask Queue):存放微任务(microtask),这些是需要尽快执行的小任务,比如由 Future.microtask 创建的任务。微任务队列会在当前事件循环迭代的执行栈清空后,且在下一个事件循环迭代之前执行。

Microtask

Microtask 是 Dart 中的一种特殊任务,它会被安排在微任务队列中,其执行时机位于当前事件循环的末尾和下一个事件循环的开始之前。微任务的特点是它们会被优先处理,意味着所有排队的微任务都会在下一个常规任务(来自任务队列的任务)开始之前完成。这使得微任务适合于需要快速执行但又不希望阻塞主线程的小型工作,比如状态更新或是在异步操作完成后立即处理结果。

示例

1
2
3
4
5
6
7
8
9
10
Future<void> main() async {
print('开始');

Future.microtask(() => print('微任务'));
Future.sync(() => print('同步任务'));
Future(() => print('异步任务'));
Future.value('value').then((value) => print('then'));

print('结束');
}

输出:

1
2
3
4
5
6
开始
同步任务
结束
微任务
then
异步任务