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));
}