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