當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。