跳到主要内容

channel

搜索

函数 channel 

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

创建一个有界 mpsc channel,用于在异步任务之间通信,并提供背压。

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

Sender 上发送的所有数据将按发送顺序在 Receiver 上可用。

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

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

§恐慌

如果缓冲区容量为 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);
}