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

Dart: поздний подписчик broadcast-потока

Вопрос

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

import 'dart:async';


Future<void> main() async {
  final c = StreamController<int>.broadcast();
  c.stream.listen((v) => print('A $v'));
  c.add(1);
  await Future(() {});
  c.stream.listen((v) => print('B $v'));
  c.add(2);
  await c.close();
}

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

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

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

Коротко

Код выведет: A 1, A 2, B 2. Broadcast доставляет события только тем, кто подписан в момент доставки.

Что выведет

A 1
A 2
B 2

Разбор

Broadcast доставляет события только тем, кто подписан в момент доставки. B подписался после того, как 1 уже было доставлено (мы дождались события), поэтому его не видит. Событие 2 получают оба. Single-subscription контроллер, наоборот, буферизовал бы события до первой подписки и не разрешил бы второго слушателя.

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

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