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