Tokio

Tokio provides:

  • 非同期のコードを実行するためのマルチスレッドのランタイム。
  • 標準ライブラリの非同期バージョン。
  • 大きなライブラリのエコシステム。
use tokio::time;

async fn count_to(count: i32) {
    for i in 1..=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 1..5 {
        println!("Main task: {i}");
        time::sleep(time::Duration::from_millis(5)).await;
    }
}
  • tokio::mainのマクロにより、mainの非同期処理を作ることができます。

  • spawn関数は新しい並行の「タスク」を作成します。

  • 注意:spawnFutureを引数に取るため、count_toに対して.awaitを呼ぶことはありません。

さらなる探求:

  • どうしてcount_toは(通常は)10に辿り着かないのでしょうか?これは非同期処理のキャンセルの例です。 tokio::spawnは完了まで待機するためのハンドラを返します。

  • プロセスを新しく作る代わりに、count_to(10).awaitを試してみてください。

  • tokio::spawnから返されたタスクを待機してみてください。