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.18.5/dart-async/scheduleMicrotask.html

Spec-Zone.ru

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