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

Dart: две async-функции с await

Вопрос

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

Future<void> a() async {
  print('a1');
  await Future.value();
  print('a2');
}

Future<void> b() async {
  print('b1');
  await Future(() {});
  print('b2');
}

void main() async {
  final fb = b();
  final fa = a();
  print('main');
  await fa;
  await fb;
  print('end');
}

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

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

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

Коротко

Код выведет: b1, a1, main, a2, b2, end. Обе функции синхронно печатают первые строки в порядке вызова: b1, a1, затем main. a ждёт уже завершённый Future: продолжение придёт микрозадачей, a2. b ждёт Future(() {}), то есть событие из event queue, поэтому b2 позже. end после обоих.

Что выведет

b1
a1
main
a2
b2
end

Разбор

Обе функции синхронно печатают первые строки в порядке вызова: b1, a1, затем main. a ждёт уже завершённый Future: продолжение придёт микрозадачей, a2. b ждёт Future(() {}), то есть событие из event queue, поэтому b2 позже. end после обоих.

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

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