Tokio
Tokio provides:
- یک runtime از نوع multi-thread برای اجرای کدهای ناهمزمان(asynchronous).
- یک asynchronous version کتابخانهای استاندارد است.
- اکوسیستم بزرگی از کتابخانهها.
use tokio::time; async fn count_to(count: i32) { for i in 0..count { println!("شمارش 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را async کنیم. -
تابع
spawnیک “task” جدید و همزمان ایجاد میکند. -
توجه:
spawnیکFutureمیگیرد، شما.awaitرا درcount_toصدا نمیزنید.
Further بررسی:
-
چرا
count_to(معمولا) به مقدار ۱۰ نمیرسد؟ این نمونهای از لغو async است.tokio::spawnیک handle را برمیگرداند که میتوان مدتی منتظر ماند تا تمام شود. -
به جای spawn مورد
count_to(10).await» را امتحان کنید. -
منتظر کار برگشتی از
tokio::spawnباشید.