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

Dart: async* генератор и await for

Вопрос

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

Stream<int> count(int n) async* {
  for (var i = 1; i <= n; i++) {
    print('yield $i');
    yield i;
  }
}

Future<void> main() async {
  final s = count(2);
  print('создан');
  await for (final v in s) {
    print('получил $v');
  }
  print('готово');
}

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

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

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

Коротко

Код выведет: создан, yield 1, получил 1, yield 2, получил 2, готово. Тело async не начинается при вызове: генератор ленивый и стартует при подписке, поэтому сначала создан. await for получает значения по одному, и генератор продолжает только когда потребитель готов: строки чередуются.

Что выведет

создан
yield 1
получил 1
yield 2
получил 2
готово

Разбор

Тело async* не начинается при вызове: генератор ленивый и стартует при подписке, поэтому сначала создан. await for получает значения по одному, и генератор продолжает только когда потребитель готов: строки чередуются.

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

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