Функция scheduleMicrotask
void scheduleMicrotask(Выполняет функцию асинхронно.
Обработчики событий, зарегистрированные с помощью этой функции, всегда выполняются в порядке очереди и гарантированно выполняются перед другими асинхронными событиями (такими как события 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