Struct std::sync::mpsc::Sender

1.0.0 · source ·
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);
Run

Implementations§

source§

impl<T> Sender<T>

source

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);
Run

Trait Implementations§

source§

impl<T> Clone for Sender<T>

source§

fn clone(&self) -> Sender<T>

克隆发送者以发送到其他线程。

请注意,请注意发送方的生命周期,因为所有发送方 (包括原始发送方) 都需要丢弃,以便 Receiver::recv 停止阻塞。

source§

fn clone_from(&mut self, source: &Self)

source 执行复制分配。 Read more
1.8.0 · source§

impl<T> Debug for Sender<T>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

使用给定的格式化程序格式化该值。 Read more
source§

impl<T> Drop for Sender<T>

source§

fn drop(&mut self)

执行此类型的析构函数。 Read more
source§

impl<T: Send> Send for Sender<T>

source§

impl<T> !Sync for Sender<T>

Auto Trait Implementations§

§

impl<T> RefUnwindSafe for Sender<T>

§

impl<T> Unpin for Sender<T>

§

impl<T> UnwindSafe for Sender<T>

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

获取 selfTypeIdRead more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

从拥有的值中一成不变地借用。 Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

从拥有的值中借用。 Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

返回未更改的参数。

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

调用 U::from(self)

也就是说,这种转换是 From<T> for U 实现选择执行的任何操作。

source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

获得所有权后的结果类型。
source§

fn to_owned(&self) -> T

从借用的数据创建拥有的数据,通常是通过克隆。 Read more
source§

fn clone_into(&self, target: &mut T)

使用借来的数据来替换拥有的数据,通常是通过克隆。 Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

发生转换错误时返回的类型。
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

执行转换。
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

发生转换错误时返回的类型。
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

执行转换。