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