跳到主要内容

channel

搜索

函数 channel 

Source
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 或 一个分配错误