Выбор ответа Junior Dart: Future, Stream, изоляты спрашивают часто обновлено

Dart: microtask и event queue

Вопрос

В каком порядке event loop Dart обрабатывает очереди?

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

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Синхронный код, затем все микрозадачи, затем одно событие, снова все микрозадачи. В изоляте две очереди.

Варианты ответа

  1. Синхронный код, затем все микрозадачи, затем одно событие, снова все микрозадачиправильный ответ
  2. Сначала все события из event queue, затем все накопившиеся микрозадачи одним пакетом
  3. Микрозадачи и события чередуются строго по одной, чтобы ни одна очередь не голодала
  4. Порядок не определён и зависит от платформы, поэтому полагаться на него нельзя

Разбор

В изоляте две очереди. Микрозадачи (scheduleMicrotask, then у завершённого Future, продолжение после await) имеют приоритет: очередь опустошается целиком перед каждым событием. События (таймеры, ввод-вывод, кадры) берутся по одному. Порядок детерминирован, на нём строятся задачи «что выведет».

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

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