По порядку Middle Dart: Future, Stream, изоляты обновлено
Порядок работы event loop в Dart
Вопрос
Расставьте шаги одного прохода, начиная с запуска main.
Попробуйте сами
Расставьте шаги по порядку стрелками.
- 1Снова выполняются все микрозадачи, появившиеся за это событие
- 2Выполняется синхронный код
mainдо конца - 3Из event queue берётся одно событие (например, таймер) и выполняется
- 4Берётся следующее событие из event queue
- 5Выполняются все микрозадачи, включая добавленные по ходу
Показать ответ и разбор
Коротко
Синхронный код всегда первый. Затем очередь микрозадач опустошается целиком, и только потом берётся одно событие.
Правильный порядок
- 1Выполняется синхронный код
mainдо конца - 2Выполняются все микрозадачи, включая добавленные по ходу
- 3Из event queue берётся одно событие (например, таймер) и выполняется
- 4Снова выполняются все микрозадачи, появившиеся за это событие
- 5Берётся следующее событие из event queue
Разбор
Синхронный код всегда первый. Затем очередь микрозадач опустошается целиком, и только потом берётся одно событие. После каждого события снова все микрозадачи. Поэтому then у готового Future всегда раньше Future(() => ...) и Future.delayed(Duration.zero).
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.