pub fn channel<T>(buffer: usize) -> (Sender<T>, Receiver<T>)展开描述
创建一个有界 mpsc channel,用于在异步任务之间通信,并提供背压。
channel 将缓冲最多提供数量的消息。一旦缓冲区已满,尝试发送新消息将等待,直到从 channel 接收一条消息为止。提供的缓冲区容量必须至少为 1。
在 Sender 上发送的所有数据将按发送顺序在 Receiver 上可用。
可以克隆 Sender 以便从多个代码位置 send 到同一 channel。仅支持一个 Receiver。
如果尝试 send 时 Receiver 已断开连接,则 send 方法将返回 SendError。类似地,如果尝试 recv 时 Sender 已断开连接,则 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);
}