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傳回的工作。