Spec-Zone.ru › Dart 2

dart:async

функция 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));
}

© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-async/scheduleMicrotask.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API