Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpThSt 131 of 288 menu
◀ ▶

Остановка потока изнутри в Rust

Если работа внутри фоновой линии обрывается, снаружи это само не превращается в исключение в основной линии. Ожидание по ручке сообщает об этом через ветку ошибки результата.

Запустим линию, которая останавливается изнутри, и разберем ответ ручки:

use std::thread; fn main() { let handle = thread::spawn(|| { panic!("stop inside"); }); match handle.join() { Ok(_) => println!("value"), Err(_) => println!("thread stopped"), } }

На экране строка thread stopped. Успешная ветка не выполняется, потому что замыкание не вернуло значение наружу.

Тот же разбор удобно сочетать с коротким сообщением до и после ожидания:

use std::thread; fn main() { println!("before"); let handle = thread::spawn(|| { panic!("fail"); }); match handle.join() { Ok(v) => println!("got {}", v), Err(_) => println!("join error"), } println!("after"); }

Дано число:

let num = 0;

Фоновая линия должна вернуть этот литерал в одном варианте программы и оборваться изнутри в другом. Сравните, что печатает ожидание ручки в каждом случае.

Скажите, дойдет ли основная линия до кода после ожидания, если внутри фоновой работа оборвалась, но снаружи обработали ветку ошибки.

Дано число:

let num = 6;

Запустите линию, которая должна была вернуть литерал, но останавливается до возврата. Выведите короткое сообщение только если ожидание вернуло ошибку.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить