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