Spec-Zone.ru › Dart 2

dart:async

Конструктор StreamController<T>.broadcast

StreamController<T>.broadcast(
  1. {void onListen( )?,
  2. void onCancel( )?,
  3. bool sync = false}
)

Контроллер, где к потоку stream можно подключиться более чем один раз.

Поток Stream, возвращаемый свойством stream, является потоком широковещательной рассылки. К нему можно подключиться более чем один раз.

Поток должен быть инертным до тех пор, пока подписчик не начнёт прослушивание (с помощью callback onListen для начала производства событий). Потоки не должны утечка ресурсов (например, веб-сокеты), когда ни один пользователь не прослушивает поток.

Потоки широковещательной рассылки не буферизуют события, когда нет слушателей.

Контроллер распределяет любые события всем текущим подключенным слушателям в момент вызова add, addError или close. Не разрешается вызывать add, addError, или close перед возвратом предыдущего вызова. Контроллер не имеет внутренней очереди событий, и если слушателей нет в момент добавления события, оно будет просто проигнорировано, или, если это ошибка, будет сообщено как необработанная.

Подписка каждого слушателя обрабатывается независимо, и если один приостанавливается, то затронут только приостанавливающийся слушатель. Приостановленный слушатель будет буферизовать события внутри до возобновления или отмены.

Если sync имеет значение true, события могут быть сгенерированы непосредственно подписками потока во время вызова add, addError или close. Возвращаемый контроллер потока является SynchronousStreamController и должен использоваться с необходимой осторожностью, чтобы не нарушить контракт потока Stream. См. Completer.sync для некоторых пояснений о том, когда можно использовать синхронную отправку. В случае сомнений оставьте контроллер не синхронным.

Если sync имеет значение false, событие всегда будет отправлено позже, после завершения кода, добавившего событие. В этом случае не даётся никаких гарантий относительно того, когда несколько слушателей получат события, за исключением того, что каждый слушатель получит все события в правильном порядке. Каждая подписка обрабатывает события индивидуально. Если два события отправляются на асинхронный контроллер с двумя слушателями, один из слушателей может получить оба события до того, как другой слушатель получит любое. Слушатель должен быть подключен как при инициировании события (то есть при вызове add), так и при его последующей доставке, чтобы получить событие.

Callback onListen вызывается, когда подключается первый слушатель, а onCancel вызывается, когда больше нет активных слушателей. Если слушатель добавляется снова позже, после вызова onCancel, то onListen будет вызван снова.

Реализация

factory StreamController.broadcast(
    {void onListen()?, void onCancel()?, bool sync = false}) {
  return sync
      ? _SyncBroadcastStreamController<T>(onListen, onCancel)
      : _AsyncBroadcastStreamController<T>(onListen, onCancel);
}

© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.18.5/dart-async/StreamController/StreamController.broadcast.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API