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

Dart: цепочка then и вложенный Future

Вопрос

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

import 'dart:async';


void main() {
  Future.value(1)
      .then((v) {
        print('then $v');
        return Future(() => v + 1);
      })
      .then((v) => print('then $v'));
  scheduleMicrotask(() => print('micro'));
  Future(() => print('event'));
  print('sync');
}

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

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

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

Коротко

Код выведет: sync, then 1, micro, event, then 2. Синхронно sync.

Что выведет

sync
then 1
micro
event
then 2

Разбор

Синхронно sync. Future.value(1) создан первым, и микрозадача его завершения встала в очередь раньше, чем micro: поэтому then 1 идёт до micro. Первый then вернул Future(...), то есть событие, поставленное уже после event. Второй then ждёт это событие, поэтому event раньше then 2.

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

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