pub fn channel<T>(capacity: usize) -> (Sender<T>, Receiver<T>)where
T: Clone,
Expand description
Create a bounded, multi-producer, multi-consumer channel where each sent value is broadcasted to all active receivers.
Note: The actual capacity may be greater than the provided capacity
.
All data sent on Sender
will become available on every active
Receiver
in the same order as it was sent.
The Sender
can be cloned to send
to the same channel from multiple
points in the process or it can be used concurrently from an Arc
. New
Receiver
handles are created by calling Sender::subscribe
.
If all Receiver
handles are dropped, the send
method will return a
SendError
. Similarly, if all Sender
handles are dropped, the recv
method will return a RecvError
.
§Examples
use tokio::sync::broadcast;
#[tokio::main]
async fn main() {
let (tx, mut rx1) = broadcast::channel(16);
let mut rx2 = tx.subscribe();
tokio::spawn(async move {
assert_eq!(rx1.recv().await.unwrap(), 10);
assert_eq!(rx1.recv().await.unwrap(), 20);
});
tokio::spawn(async move {
assert_eq!(rx2.recv().await.unwrap(), 10);
assert_eq!(rx2.recv().await.unwrap(), 20);
});
tx.send(10).unwrap();
tx.send(20).unwrap();
}
§Panics
This will panic if capacity
is equal to 0
or larger
than usize::MAX / 2
.