Функция 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 обрабатывает очередь событий и очередь микрозадач, чтобы вы могли писать более эффективный асинхронный код с меньшим количеством неожиданностей.
Реализация
@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