РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1062 of 1245 menu

Метод recv_timeout

Метод recv_timeout пытается получить значение из канала, но, в отличие от метода recv, не блокирует поток бесконечно. Параметром метод принимает значение типа Duration - максимальное время ожидания. Если значение приходит вовремя, метод возвращает Ok(value). Если время истекло, возвращается ошибка RecvTimeoutError::Timeout. Если все отправители отсоединились, возвращается RecvTimeoutError::Disconnected.

Синтаксис

receiver.recv_timeout(timeout)

Пример

Давайте отправим значение в канал из другого потока и получим его с таймаутом в одну секунду:

use std::sync::mpsc::channel; use std::time::Duration; use std::thread; fn main() { let (tx, rx) = channel(); thread::spawn(move || { thread::sleep(Duration::from_millis(100)); tx.send("abcde").unwrap(); }); let res = rx.recv_timeout(Duration::from_secs(1)); println!("{:?}", res); }

Результат выполнения кода:

Ok("abcde")

Пример

Давайте попробуем получить значение с таймаутом в 100 миллисекунд, тогда как отправитель заснёт на одну секунду:

use std::sync::mpsc::channel; use std::time::Duration; use std::thread; fn main() { let (tx, rx) = channel(); thread::spawn(move || { thread::sleep(Duration::from_secs(1)); tx.send("abcde").unwrap(); }); let res = rx.recv_timeout(Duration::from_millis(100)); println!("{:?}", res); }

Результат выполнения кода:

Err(Timeout)

Пример

Давайте отсоединим отправитель и попробуем получить значение с таймаутом:

use std::sync::mpsc::channel; use std::time::Duration; fn main() { let (tx, rx) = channel::<i32>(); drop(tx); let res = rx.recv_timeout(Duration::from_secs(1)); println!("{:?}", res); }

Результат выполнения кода:

Err(Disconnected)

Смотрите также

  • метод recv,
    который блокирующе получает значение из канала
  • метод try_recv,
    который неблокирующе пытается получить значение из канала
  • класс Receiver,
    который представляет принимающую сторону канала
  • функция channel,
    которая создаёт асинхронный канал передачи данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить