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から返されたタスクを待機してみてください。