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