Spec-Zone.ru › Dart 1

dart:async

Конструктор-фабрика StreamController.broadcast

StreamController.broadcast({void onListen(), void onCancel(), bool sync: false })

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

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

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

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

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

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

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

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

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

Исходный код

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

© 2012 the Dart project authors
Licensed under the Creative Commons Attribution-ShareAlike License v4.0.
https://api.dartlang.org/stable/1.24.3/dart-async/StreamController/StreamController.broadcast.html

Spec-Zone.ru

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