Spec-Zone.ru › Dart 1

dart:async

Функция scheduleMicrotask

void 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 обрабатывает очередь событий и очередь микрозадач, чтобы писать более качественный асинхронный код с меньшим количеством неожиданностей.

Исходный код

void scheduleMicrotask(void callback()) {
  _Zone currentZone = Zone.current;
  if (identical(_ROOT_ZONE, currentZone)) {
    // No need to bind the callback. We know that the root's scheduleMicrotask
    // will be invoked in the root zone.
    _rootScheduleMicrotask(null, null, _ROOT_ZONE, callback);
    return;
  }
  _ZoneFunction implementation = currentZone._scheduleMicrotask;
  if (identical(_ROOT_ZONE, implementation.zone) &&
      _ROOT_ZONE.inSameErrorZone(currentZone)) {
    _rootScheduleMicrotask(
        null, null, currentZone, currentZone.registerCallback(callback));
    return;
  }
  Zone.current
      .scheduleMicrotask(Zone.current.bindCallback(callback, runGuarded: true));
}

© 2012 the Dart project authors
Licensed under the Creative Commons Attribution-ShareAlike License v4.0.
https://api.dartlang.org/stable/1.24.3/dart-async/scheduleMicrotask.html

Spec-Zone.ru

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