Метод join
Метод join принадлежит классу JoinHandle
и используется для ожидания завершения дочернего потока.
Когда поток создаётся с помощью функции spawn,
она возвращает JoinHandle. Вызов join
на этом дескрипторе блокирует текущий поток до тех пор,
пока связанный с ним поток не закончит работу.
Метод не принимает параметров и возвращает значение типа
Result, содержащее результат, который вернул
завершившийся поток, либо ошибку, если поток паниковал.
Синтаксис
join_handle.join()
Пример
Давайте создадим поток, который возвращает число,
и дождёмся его завершения с помощью join:
use std::thread;
fn main()
{
let handle = thread::spawn(|| {
return 42;
});
let res = handle.join();
println!("{:?}", res);
}
Результат выполнения кода:
Ok(42)
Пример
Давайте создадим поток, который возвращает строку, и дождёмся его завершения:
use std::thread;
fn main()
{
let handle = thread::spawn(|| {
return "abcde";
});
let res = handle.join();
println!("{:?}", res);
}
Результат выполнения кода:
Ok("abcde")
Пример
Давайте создадим поток, который паникует,
и посмотрим, как join вернёт ошибку:
use std::thread;
fn main()
{
let handle = thread::spawn(|| {
panic!("something went wrong");
});
let res = handle.join();
println!("{:?}", res.is_err());
}
Результат выполнения кода:
true
Смотрите также
-
класс
JoinHandle,
который представляет дескриптор дочернего потока -
метод
is_finished,
который проверяет, завершился ли поток -
функция
spawn,
которая создаёт новый поток и возвращает JoinHandle -
функция
sleep,
которая приостанавливает текущий поток на заданное время