当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust Receiver.recv用法及代码示例


本文简要介绍rust语言中 std::sync::mpsc::Receiver.recv 的用法。

用法

pub fn recv(&self) -> Result<T, RecvError>

尝试在此接收器上等待一个值,如果相应的通道已挂起,则返回错误。

如果没有可用数据并且有可能发送更多数据(至少一个发送者仍然存在),此函数将始终阻塞当前线程。一旦将消息发送到相应的 Sender (或 SyncSender ),此接收器将唤醒并返回该消息。

如果相应的 Sender 已断开连接,或者在此调用阻塞时断开连接,则此调用将唤醒并返回 Err ,以指示此通道上再也无法接收到消息。但是,由于通道是缓冲的,因此在断开连接之前发送的消息仍将被正确接收。

例子

use std::sync::mpsc;
use std::thread;

let (send, recv) = mpsc::channel();
let handle = thread::spawn(move || {
    send.send(1u8).unwrap();
});

handle.join().unwrap();

assert_eq!(Ok(1), recv.recv());

缓冲行为:

use std::sync::mpsc;
use std::thread;
use std::sync::mpsc::RecvError;

let (send, recv) = mpsc::channel();
let handle = thread::spawn(move || {
    send.send(1u8).unwrap();
    send.send(2).unwrap();
    send.send(3).unwrap();
    drop(send);
});

// wait for the thread to join so we ensure the sender is dropped
handle.join().unwrap();

assert_eq!(Ok(1), recv.recv());
assert_eq!(Ok(2), recv.recv());
assert_eq!(Ok(3), recv.recv());
assert_eq!(Err(RecvError), recv.recv());

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 std::sync::mpsc::Receiver.recv。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。