Rust スレッドの実行結果を受け取る join, unwrap_or
概要
スレッド終了時に実行結果を受け取るには「join().unwrap_or(...)」を使う。
プログラム例
- 本スレッドから別スレッドに数値を渡す。
- 別スレッドでは、10000÷数値 の計算式の文字列を作る。
- これを本スレッドに渡す。
use std::thread::{spawn, sleep}; use std::time::{Duration}; fn main() { let 入力 = 123; let 別スレッド = spawn(move || { sleep(Duration::from_millis(1000)); // 1秒待つ。 format!("10000÷{}={}", 入力, 10000 / 入力) // セミコロンなし。 }); let 出力 = 別スレッド.join().unwrap_or("異常終了".to_string()); println!("{}", 出力); }
解説
- 別スレッドの結果は、セミコロン (;) を付けなかった最後の文を実行した結果になる。
- unwrap_or(...)を使うと、スレッドの成功時と失敗時の両方に対応できる。
- 成功時には "123×10=1230" が得られ、失敗時には "異常終了" が得られる。
- この例で異常終了させるには、入力に 0 を指定すればよい。(ゼロ除算)