Tokio
Tokio は以下を提供します。
- 非同期コードを実行するためのマルチスレッドランタイム。
- 標準ライブラリの非同期版。
- 大規模なライブラリエコシステム。
// 著作権 2024 Google LLC // SPDX-License-Identifier: Apache-2.0 use tokio::time; async fn count_to(count: i32) { for i in 0..count { println!("Count in task: {i}!"); time::sleep(time::Duration::from_millis(5)).await; } } #[tokio::main] async fn main() { tokio::spawn(count_to(10)); for i in 0..5 { println!("Main task: {i}"); time::sleep(time::Duration::from_millis(5)).await; } }
-
tokio::mainマクロを使うことで、mainを async にできるようになりました。 -
spawn関数は、新しい並行な「タスク」を作成します。 -
注:
spawnはFutureを受け取るため、count_toに対して.awaitは呼び出しません。
さらに調べてみましょう:
-
なぜ
count_toは 10 まで到達しないのでしょうか?これは async キャンセルの例です。tokio::spawnは、完了まで待機するために await できるハンドルを返します。 -
spawn する代わりに
count_to(10).awaitを試してみてください。 -
tokio::spawnから返されるタスクを await してみてください。