pub struct Sender<T> { /* private fields */ }
Expand description
Rust 的异步 channel
类型的发送一半。
这一半只能由一个线程拥有,但可以克隆以发送给其他线程。
可以使用 send
通过此通道发送消息。
Note: 所有发送者 (原始和克隆) 都需要被接收者去除,以停止阻止接收带有 Receiver::recv
的消息。
Examples
use std::sync::mpsc::channel;
use std::thread;
let (sender, receiver) = channel();
let sender2 = sender.clone();
// 第一个线程拥有发送者
thread::spawn(move || {
sender.send(1).unwrap();
});
// 第二个线程拥有 sender2
thread::spawn(move || {
sender2.send(2).unwrap();
});
let msg = receiver.recv().unwrap();
let msg2 = receiver.recv().unwrap();
assert_eq!(3, msg + msg2);
RunImplementations§
source§impl<T> Sender<T>
impl<T> Sender<T>
sourcepub fn send(&self, t: T) -> Result<(), SendError<T>>
pub fn send(&self, t: T) -> Result<(), SendError<T>>
尝试在此通道上发送值,如果无法发送,则将其返回。
当确定通道的另一端尚未挂断时,发送成功。
不成功的发送将是相应的接收者已被重新分配的发送。
请注意,返回值 Err
表示将永远不会接收到数据,但是 Ok
的返回值 不是 意味着将接收到数据。
此函数返回 Ok
之后,相应的接收者有可能立即挂断。
此方法永远不会阻塞当前线程。
Examples
use std::sync::mpsc::channel;
let (tx, rx) = channel();
// 此发送始终成功
tx.send(1).unwrap();
// 由于接收者不见了,因此发送失败
drop(rx);
assert_eq!(tx.send(1).unwrap_err().0, 1);
RunTrait Implementations§
source§impl<T> Clone for Sender<T>
impl<T> Clone for Sender<T>
source§fn clone(&self) -> Sender<T>
fn clone(&self) -> Sender<T>
克隆发送者以发送到其他线程。
请注意,请注意发送方的生命周期,因为所有发送方 (包括原始发送方) 都需要丢弃,以便 Receiver::recv
停止阻塞。
source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
从
source
执行复制分配。 Read moreimpl<T: Send> Send for Sender<T>
impl<T> !Sync for Sender<T>
Auto Trait Implementations§
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
从拥有的值中借用。 Read more