ys memos

Blog

Rustのtokioでblockingな処理を実行する


rust

2025/05/06


Rustのtokioで非同期処理を行う場合、基本的には非同期関数を使用しますが、外部クレートなどで非同期対応していない場合、blockingな処理をtokioランタイム内で実行することがある。 そこで、間違った方法で実行すると、tokioの非同期処理がブロックされてしまうため、注意が必要となる。


async fn call_hoge() {
  tokio::task::spawn_blocking(move || {
    hoge_blocking_function();
  }).await.expect("failed to call hoge_blocking_function");
}

Available on crate feature rt only.

なので、使えない場合はfeatuersを調整する必要があるかもしれない。


async fn call_hoge() {
  hoge_blocking_function();
}

外部クレートを利用したコードを書く時に、気を抜いていると、間違えて非同期ランタイムをブロックしてしまうことがあるので、注意が必要です。

思ったより性能が出ない場合や、処理が止まっている事象が発生したら、ブロッキングな処理をそのまま呼び出している可能性があります。 この場合、IOが絡む処理や、OSイベントを待つ処理などが要注意となります。


関連タグを探す