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


Rust Receiver.recv_deadline用法及代码示例


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

用法

pub fn recv_deadline(&self, deadline: Instant) -> Result<T, RecvTimeoutError>

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

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

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

例子

在截止日期前成功接收值:

#![feature(deadline_api)]
use std::thread;
use std::time::{Duration, Instant};
use std::sync::mpsc;

let (send, recv) = mpsc::channel();

thread::spawn(move || {
    send.send('a').unwrap();
});

assert_eq!(
    recv.recv_deadline(Instant::now() + Duration::from_millis(400)),
    Ok('a')
);

到达截止日期时收到错误:

#![feature(deadline_api)]
use std::thread;
use std::time::{Duration, Instant};
use std::sync::mpsc;

let (send, recv) = mpsc::channel();

thread::spawn(move || {
    thread::sleep(Duration::from_millis(800));
    send.send('a').unwrap();
});

assert_eq!(
    recv.recv_deadline(Instant::now() + Duration::from_millis(400)),
    Err(mpsc::RecvTimeoutError::Timeout)
);

相关用法


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