Tokio
Tokio provides:
- 非同期のコードを実行するためのマルチスレッドのランタイム。
- 標準ライブラリの非同期バージョン。
- 大きなライブラリのエコシステム。
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
の非同期処理を作ることができます。 -
spawn
関数は新しい並行の「タスク」を作成します。 -
注意:
spawn
はFuture
を引数に取るため、count_to
に対して.await
を呼ぶことはありません。
さらなる探求:
-
どうして
count_to
は(通常は)10に辿り着かないのでしょうか?これは非同期処理のキャンセルの例です。tokio::spawn
は完了まで待機するためのハンドラを返します。 -
プロセスを新しく作る代わりに、
count_to(10).await
を試してみてください。 -
tokio::spawn
から返されたタスクを待機してみてください。