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