RCIE-ジャンクのコード屋

主に自分のためにコーディングのTIPSを蓄積しています。

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 を指定すればよい。(ゼロ除算)