Tokio

Tokio 提供以下項目:

  • 執行非同步程式碼的多執行緒執行階段。
  • 標準程式庫的非同步版本。
  • 龐大的程式庫生態系統。
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 函式會建立新的並行「工作」。

  • 注意:spawn 會採用 Future,您不會在 count_to 上呼叫 .await

進一步探究:

  • 為什麼 count_to (通常) 不會達到 10?這是非同步取消的例子。直到 tokio::spawn 完成前,所傳回的控制代碼可以接受等待。

  • 嘗試使用 count_to(10).await,而非採用產生狀態。

  • 嘗試等待從 tokio::spawn 傳回的工作。