async
/await
At a high level, async Rust code looks very much like "normal" sequential code:
use futures::executor::block_on; async fn count_to(count: i32) { for i in 0..count { println!("Count is: {i}!"); } } async fn async_main(count: i32) { count_to(count).await; } fn main() { block_on(async_main(10)); }
نکات کلیدی:
-
توجه داشته باشید که این یک مثال ساده برای نشان دادن syntax است. هیچ عملیات طولانی مدت یا هیچ همزمانی(concurrency) واقعی در آن وجود ندارد!
-
نوع برگشت async call چیست؟
- برای مشاهده type از
let future: () = async_main(10);
درmain
استفاده کنید.
- برای مشاهده type از
-
کلمه کلیدی "async" شیرینیِ syntax زبان Rust است. کامپایلر نوع بازگشتی را با یک future جایگزین میکند.
-
شما نمیتوانید بدون دستورالعملهای اضافی به کامپایلر در مورد نحوه استفاده از future بازگشتی،
main
را async کنید. -
برای اجرای کدهای همگام به یک اجرا کننده (executor) نیاز دارید.
block_on
که thread رشته فعلی را تا زمانی که future ارائه شده تکمیل شود مسدود میکند. -
همیشه
await
به طور ناهمزمان (asyn) منتظر تکمیل یک عملیات دیگر است. برخلافblock_on
یکawait
معمولاً thread فعلی را مسدود نمیکند. -
.await
فقط میتواند در داخل یک تابعasync
استفاده شود (یا block؛ این مورد در آینده معرفی میشوند).