Метод recv
Метод recv используется для получения сообщения из канала. Он блокирует текущий поток выполнения до тех пор, пока в канале не появится сообщение или пока все отправители не будут уничтожены. Метод не принимает параметров и возвращает значение типа Result<T, RecvError>. Если канал ещё открыт, возвращается Ok(value), а если все отправители отключены - Err(RecvError).
Синтаксис
receiver.recv()
Пример
Давайте создадим канал, отправим в него число и получим его с помощью метода recv:
use std::sync::mpsc;
fn main()
{
let (tx, rx) = mpsc::channel();
tx.send(12345).unwrap();
let res = rx.recv().unwrap();
println!("{}", res);
}
Результат выполнения кода:
12345
Пример
Давайте отправим строку и получим её через метод recv:
use std::sync::mpsc;
fn main()
{
let (tx, rx) = mpsc::channel();
tx.send("abcde").unwrap();
let res = rx.recv().unwrap();
println!("{}", res);
}
Результат выполнения кода:
"abcde"
Пример
Давайте посмотрим, что произойдёт, если все отправители будут уничтожены до вызова recv:
use std::sync::mpsc;
fn main()
{
let (tx, rx) = mpsc::channel::<i32>();
drop(tx);
let res = rx.recv();
println!("{:?}", res);
}
Результат выполнения кода:
Err(RecvError)
Смотрите также
-
метод
try_recv,
который пытается получить сообщение без блокировки потока -
метод
recv_timeout,
который ожидает сообщение с ограничением по времени -
метод
send,
который отправляет сообщение в канал -
класс
channel,
который создаёт асинхронный канал передачи данных