Что выведет код Middle Dart: Future, Stream, изоляты обновлено

Dart: Future.delayed(0) и микрозадачи из таймера

Вопрос

Что выведет программа? По строке на каждый вывод.

import 'dart:async';


void main() {
  Future.delayed(Duration.zero, () {
    print('таймер 1');
    scheduleMicrotask(() => print('микро из таймера'));
  });
  Future(() => print('таймер 2'));
  Future.microtask(() => print('микро'));
  print('синхронно');
}

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

Напишите, что выведет код: каждый вывод с новой строки.

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

Коротко

Код выведет: синхронно, микро, таймер 1, микро из таймера, таймер 2. После синхронного кода выполняется микрозадача.

Что выведет

синхронно
микро
таймер 1
микро из таймера
таймер 2

Разбор

После синхронного кода выполняется микрозадача. Таймеры с нулевой задержкой срабатывают в порядке постановки. Микрозадача, поставленная внутри первого таймера, выполняется сразу после него, до второго таймера: очередь микрозадач опустошается после каждого события.

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

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