Documentation

Std.Sync.Broadcast

The Std.Sync.Broadcast module implements a broadcasting primitive for sending values to multiple consumers. It maintains a queue of values and supports both synchronous and asynchronous waiting.

This module is heavily inspired by Std.Sync.Channel as well as tokio’s broadcast implementation.

Errors that may be thrown while interacting with the broadcast channel API.

  • closed : Error

    Tried to send to a closed broadcast channel.

  • alreadyClosed : Error

    Tried to close an already closed broadcast channel.

  • notSubscribed : Error

    Tried to unsubscribe a channel that already is not part of it.

Instances For
    Equations
    Instances For
      Equations
      • One or more equations did not get rendered due to their size.
      structure Std.Broadcast (α : Type) :

      A multi-subscriber broadcast that delivers each message to all current subscribers. Supports only bounded buffering and an asynchronous API; to switch into synchronous mode use Broadcast.sync.

      Unlike Std.Channel, each message is received by every subscriber instead of just one. Subscribers only receive messages sent after they have subscribed (unless otherwise specified).

      Instances For
        structure Std.Broadcast.Receiver (α : Type) :

        A receiver for a Broadcast channel that can asynchronously receive messages. Each receiver gets a copy of every message sent to the broadcast channel after the receiver was created. Multiple receivers can exist for the same broadcast, and each will receive all messages independently.

        Instances For
          @[inline]
          def Std.Broadcast.new {α : Type} (capacity : Nat := 16) (h : capacity > 0 := by decide) :

          Creates a new broadcast channel.

          Equations
          Instances For
            @[inline]
            def Std.Broadcast.trySend {α : Type} (ch : Broadcast α) (v : α) :

            Try to send a value to the broadcast channel, if this can be completed right away without blocking return true, otherwise don't send the value and return false.

            Equations
            Instances For
              @[inline]
              def Std.Broadcast.subscribe {α : Type} (ch : Broadcast α) :

              Subscribes a new Receiver from the Broadcast channel.

              Equations
              Instances For
                @[inline]
                def Std.Broadcast.close {α : Type} (ch : Broadcast α) :

                Closes a Broadcast channel.

                Equations
                Instances For
                  @[inline]
                  def Std.Broadcast.send {α : Type} (ch : Broadcast α) (v : α) :

                  Send a value through the broadcast channel, returning a task that will resolve once the transmission could be completed.

                  Equations
                  • One or more equations did not get rendered due to their size.
                  Instances For
                    @[inline]

                    Try to receive a value from the broadcast receiver, if a message is available right away return some value, otherwise return none without blocking.

                    Equations
                    Instances For
                      @[inline]

                      Receive a value from the broadcast receiver, returning a task that will resolve with the next available message. This will block until a message is available.

                      Equations
                      Instances For
                        @[inline]

                        Creates a Selector that resolves once the broadcast channel ch has data available and provides that that data.

                        Equations
                        Instances For
                          @[inline]

                          Unsubscribes a Receiver from the Broadcast channel.

                          Equations
                          Instances For

                            ch.forAsync f calls f for every message received on ch.

                            Note that if this function is called twice, each message will only arrive at exactly one invocation.

                            Equations
                            Instances For
                              Equations
                              • One or more equations did not get rendered due to their size.
                              Equations
                              • One or more equations did not get rendered due to their size.

                              A multi-subscriber broadcast that delivers each message to all current subscribers. Supports only bounded buffering and an asynchronous API.

                              It's the sync version of Broadcast.

                              Equations
                              Instances For

                                A receiver for a Broadcast channel that can asynchronously receive messages. Each receiver gets a copy of every message sent to the broadcast channel after the receiver was created. Multiple receivers can exist for the same broadcast, and each will receive all messages independently.

                                It's the sync version of Broadcast.Receiver.

                                Equations
                                Instances For
                                  @[inline]
                                  def Std.Broadcast.Sync.new {α : Type} (capacity : Nat := 16) (h : capacity > 0 := by decide) :

                                  Creates a new broadcast channel.

                                  Equations
                                  Instances For
                                    @[inline]
                                    def Std.Broadcast.Sync.trySend {α : Type} (ch : Sync α) (v : α) :

                                    Try to send a value to the broadcast channel, if this can be completed right away without blocking return true, otherwise don't send the value and return false.

                                    Equations
                                    Instances For
                                      @[inline]
                                      def Std.Broadcast.Sync.send {α : Type} (ch : Sync α) (v : α) :

                                      Send a value through the channel, blocking until the transmission could be completed.

                                      Equations
                                      Instances For
                                        @[inline]

                                        Try to receive a value from the broadcast receiver, if a message is available right away return some value, otherwise return none without blocking.

                                        Equations
                                        Instances For

                                          Receive a value from the channel, blocking until the transmission could be completed.

                                          Equations
                                          Instances For
                                            partial def Std.Broadcast.Sync.Receiver.forIn {α : Type} {m : TypeType u_1} {β : Type} [Inhabited α] [Monad m] [MonadLiftT BaseIO m] (ch : Receiver α) (f : αβm (ForInStep β)) :
                                            βm β

                                            for msg in ch.sync do ... receives all messages in the channel until it is closed.

                                            Equations
                                            • One or more equations did not get rendered due to their size.