scheduleMicrotask 函数
- void callback()
异步执行一个函数。
通过此函数注册的回调总是按顺序执行,并保证在其它异步事件(如 Timer 事件,或 DOM 事件)之前执行。
警告:通过此方法注册异步回调可能会使 DOM 饥饿。例如,以下程序会一直运行回调而不会给 Timer 回调执行的机会
main() {
Timer.run(() { print("executed"); }); // Will never be executed.
foo() {
scheduleMicrotask(foo); // Schedules [foo] in front of other events.
}
foo();
}
其他资源
- Dart 的事件循环:了解 Dart 如何处理事件队列和微任务队列,以便您能以更少意外的方式编写更好的异步代码。
实现
@pragma('vm:entry-point', 'call')
void scheduleMicrotask(void Function() callback) {
_Zone currentZone = Zone._current;
if (identical(_rootZone, currentZone)) {
// No need to bind the callback. We know that the root's scheduleMicrotask
// will be invoked in the root zone.
_rootScheduleMicrotask(null, null, _rootZone, callback);
return;
}
_ZoneFunction implementation = currentZone._scheduleMicrotask;
if (identical(_rootZone, implementation.zone) &&
_rootZone.inSameErrorZone(currentZone)) {
_rootScheduleMicrotask(
null, null, currentZone, currentZone.registerCallback(callback));
return;
}
Zone.current.scheduleMicrotask(Zone.current.bindCallbackGuarded(callback));
}