跳到主要内容

channel

搜索

函数 channel 

Source
pub fn channel<T>(buffer: usize) -> (Sender<T>, Receiver<T>)
展开描述

创建一个有界 mpsc channel,用于在异步任务之间通过背压(backpressure)进行通信。

通道将缓冲最多所提供数量的消息。 一旦缓冲区已满,尝试发送新消息将等待, 直到从通道接收到一条消息。所提供的缓冲容量必须至少为 1。

通过 Sender 发送的所有数据 将按发送的相同顺序 在 Receiver 上变得可用。

Sender 可以被克隆, 以便从多个代码位置 send 到同一通道。 仅支持一个 Receiver

如果在尝试 sendReceiver 已断开连接, 则 send 方法 将返回 SendError。 类似地, 如果在尝试 recvSender 已断开连接, 则 recv 方法将返回 None

§Panics

如果缓冲容量为 0 或太大,则会 panic。 当前最大容量为 Semaphore::MAX_PERMITS

§示例

use tokio::sync::mpsc;

let (tx, mut rx) = mpsc::channel(100);

tokio::spawn(async move {
    for i in 0..10 {
        if let Err(_) = tx.send(i).await {
            println!("receiver dropped");
            return;
        }
    }
});

while let Some(i) = rx.recv().await {
     println!("got = {}", i);
}