scheduleMicrotask 函数

void scheduleMicrotask(
  1. 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));
    }