По порядку Middle Dart: Future, Stream, изоляты обновлено

Порядок работы event loop в Dart

Вопрос

Расставьте шаги одного прохода, начиная с запуска main.

Попробуйте сами

Расставьте шаги по порядку стрелками.

  1. 1
    Снова выполняются все микрозадачи, появившиеся за это событие
  2. 2
    Выполняется синхронный код main до конца
  3. 3
    Из event queue берётся одно событие (например, таймер) и выполняется
  4. 4
    Берётся следующее событие из event queue
  5. 5
    Выполняются все микрозадачи, включая добавленные по ходу
Показать ответ и разбор

Коротко

Синхронный код всегда первый. Затем очередь микрозадач опустошается целиком, и только потом берётся одно событие.

Правильный порядок

  1. 1
    Выполняется синхронный код main до конца
  2. 2
    Выполняются все микрозадачи, включая добавленные по ходу
  3. 3
    Из event queue берётся одно событие (например, таймер) и выполняется
  4. 4
    Снова выполняются все микрозадачи, появившиеся за это событие
  5. 5
    Берётся следующее событие из event queue

Разбор

Синхронный код всегда первый. Затем очередь микрозадач опустошается целиком, и только потом берётся одно событие. После каждого события снова все микрозадачи. Поэтому then у готового Future всегда раньше Future(() => ...) и Future.delayed(Duration.zero).

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.