跳到主要内容

channel

搜索

函数 channel 

源代码
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 或分配错误