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باشید.