SynchronousStreamController<T> абстрактный класс
Контроллер потока, который доставляет события синхронно.
Синхронный контроллер потока предназначен для случаев, когда уже асинхронное событие вызывает событие в потоке.
Вместо добавления события в поток в последующей микрозадаче, что приводит к дополнительной задержке, событие немедленно срабатывает синхронным контроллером потока, как будто событие потока является текущим событием или микрозадачей.
Синхронный контроллер потока может использоваться для нарушения соглашения с Stream, и его следует использовать осторожно, чтобы избежать этого.
Единственным преимуществом использования SynchronousStreamController перед обычным StreamController является улучшенная задержка. Используйте синхронную версию только в том случае, если улучшение существенно и если ее использование безопасно. В противном случае используйте обычный контроллер потока, который всегда будет иметь правильное поведение для Stream и не нарушит случайно другой код.
Добавление событий в синхронный контроллер должно происходить только как самая последняя часть обработки исходного события. В этот момент добавление события в поток равносильно возврату в цикл событий и добавлению события в следующей микрозадаче.
Каждый обратный вызов слушателя будет выполняться так, как если бы это было событие или микрозадача верхнего уровня. Это означает, что если произойдет исключение, ошибка будет сообщена как необработанная как можно скорее. Это одна из причин добавления события как последнего действия в исходном обработчике событий — любое действие, выполненное после добавления события, задержит сообщение об ошибках в обратных вызовах слушателей событий.
Если событие добавляется в среде, которая не известна как другое событие, это может привести к тому, что слушатель потока получит это событие до того, как слушатель будет готов его обработать. Мы гарантируем, что после вызова Stream.listen вы не получите никаких событий до тех пор, пока код, выполняющий прослушивание, не будет завершен. Вызов add в ответ на вызов функции неизвестного происхождения может нарушить это обещание.
Обратный вызов onListen от контроллера не является асинхронным событием, и добавление событий в контроллер в onListen обратном вызове всегда является ошибкой. События будут доставлены до того, как слушатель даже получит подписку.
Синхронный контроллер трансляционного потока также имеет ограничения, которых нет у обычного контроллера потока: методы add, addError, close и addStream не должны вызываться во время доставки события. То есть, если обратный вызов подписки на поток контроллера вызывает вызов любого из вышеперечисленных функций, вызов завершится ошибкой. Трансляционный поток может иметь более одного слушателя, и если событие добавляется синхронно, в то время как другое событие также находится в процессе добавления, последнее событие может достичь некоторых слушателей до первого. Чтобы предотвратить это, событие не может быть добавлено, пока предыдущее событие не будет обработано. Это гарантирует, что событие полностью доставлено, когда возвращается первый вызов add, addError или close, и последующие события будут доставлены в правильном порядке.
Это все еще гарантирует только доставку события подписке. Если подписка приостановлена, фактический обратный вызов все же может произойти позже, и событие вместо этого будет буферизовано подпиской. За исключением приостановки и последующих буферизованных событий, которые еще не были доставлены, обратные вызовы будут вызываться синхронно при добавлении события.
Добавление события в синхронный не-трансляционный контроллер потока, пока другое событие выполняется, может привести к задержке второго события и его не синхронной доставке, и до тех пор, пока это событие не будет доставлено, контроллер не будет действовать синхронно.
- Реализует
Конструкторы
- SynchronousStreamController()
Свойства
-
done → Future
только для чтения, унаследованное
-
Возвращает будущее, которое завершается, когда
StreamSinkзавершено. -
hashCode → int
только для чтения, унаследованное
-
Хэш-код этого объекта.
-
hasListener → bool
только для чтения, унаследованное
-
Есть ли подписчик на
Stream. -
isClosed → bool
только для чтения, унаследованное
-
Закрыт ли контроллер потока для добавления новых событий.
-
isPaused → bool
только для чтения, унаследованное
-
Нужно ли буферизовать события подписке.
-
onCancel → ControllerCancelCallback
чтение/запись, унаследованное
-
Обратный вызов, который вызывается при отмене потока.
-
onListen → ControllerCallback
чтение/запись, унаследованное
-
Обратный вызов, который вызывается при прослушивании потока.
-
onPause → ControllerCallback
чтение/запись, унаследованное
-
Обратный вызов, который вызывается при приостановке потока.
-
onResume → ControllerCallback
чтение/запись, унаследованное
-
Обратный вызов, который вызывается при возобновлении потока.
-
runtimeType → Type
только для чтения, унаследованное
-
Представление реального типа объекта.
-
sink → StreamSink<T>
только для чтения, унаследованное
-
Возвращает представление этого объекта, которое экспонирует только
StreamSinkинтерфейс. -
stream → Stream<T>
только для чтения, унаследованное
-
Поток, которым управляет этот контроллер.
Операторы
-
operator ==(
other) → bool унаследованное -
Оператор равенства.
Методы
-
add(
T data) → void -
Добавляет событие в поток контроллера.
-
addError(
Object error, [ StackTrace stackTrace ]) → void -
Добавляет ошибку в поток контроллера.
-
close(
) → Future -
Закрывает поток контроллера.
-
addStream(
Stream<T> source, { bool cancelOnError: true }) → Future унаследованное -
Получает события из
sourceи помещает их в поток этого контроллера. -
noSuchMethod(
Invocation invocation) → dynamic унаследованное -
Вызывается при доступе к несуществующему методу или свойству.
-
toString(
) → String унаследованное -
Возвращает строковое представление этого объекта.
© 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/SynchronousStreamController-class.html