pub fn channel<T>() -> (Sender<T>, Receiver<T>)
Expand description
创建一个新的异步通道,返回 sender/receiver 一半。
在 Sender
上发送的所有数据将以与发送时相同的顺序在 Receiver
上可用,并且没有 send
将阻塞调用线程 (此通道具有一个 “无限缓冲区”,与 sync_channel
不同,它将在达到其缓冲区限制后阻塞)。
recv
将阻塞直到消息可用,同时至少有一个 Sender
活着 (包括克隆)。
Sender
可以多次克隆到 send
到同一通道,但是仅支持一个 Receiver
。
如果在尝试使用 Sender
进行 send
时断开 Receiver
的连接,则 send
方法将返回 SendError
。同样,如果在尝试 recv
时断开 Sender
的连接,则 recv
方法将返回 RecvError
。
Examples
use std::sync::mpsc::channel;
use std::thread;
let (sender, receiver) = channel();
// Spawn 关闭昂贵的计算
thread::spawn(move|| {
sender.send(expensive_computation()).unwrap();
});
// 暂时做一些有用的工作
// 让我们看看答案是什么
println!("{:?}", receiver.recv().unwrap());
Run