Что выведет код 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 ошибок.