pub fn channel<T: Clone>(capacity: usize) -> (Sender<T>, Receiver<T>)展开描述
创建一个有界的、多生产者、多消费者的 channel,每个发送的值都会广播给所有活跃的接收者。
注意:实际容量可能大于所提供的 capacity。
通过 Sender 发送的所有数据
将对每个活动的 Receiver 可用,
顺序与发送时相同。
Sender 可以被克隆,
以便 send 到进程中的多个点的同一通道,
或者可以从 Arc 并发使用。
新的 Receiver 句柄通过调用 Sender::subscribe 创建。
如果所有 Receiver 句柄都已被丢弃,
则 send 方法将返回
SendError。
类似地,如果所有 Sender 句柄都已被丢弃,
则 recv
方法将返回 RecvError。
§示例
use tokio::sync::broadcast;
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
如果 capacity 等于 0,则会 panic。
此函数为 capacity 条消息预分配空间。
分配失败可能会导致 panic 或
一个分配错误。