async/await

At a high level, async Rust code looks very much like “normal” sequential code:

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Speaker Notes

This slide should take about 6 minutes.

نکات کلیدی:

  • توجه داشته باشید که این یک مثال ساده برای نشان دادن syntax است. هیچ عملیات طولانی مدت یا هیچ هم‌زمانی(concurrency) واقعی در آن وجود ندارد!

  • نوع برگشت async call چیست؟

    • برای مشاهده type از let future: () = async_main(10); در main استفاده کنید.
  • کلمه کلیدی “async” شیرینیِ syntax زبان Rust است. کامپایلر نوع بازگشتی را با یک future جایگزین می‌کند.

  • شما نمی‌توانید بدون دستورالعمل‌های اضافی به کامپایلر در مورد نحوه استفاده از future بازگشتی، main را async کنید.

  • برای اجرای کدهای همگام به یک اجرا‌ کننده (executor) نیاز دارید.block_on که thread رشته فعلی را تا زمانی که future ارائه شده تکمیل شود مسدود می‌کند.

  • همیشه await به طور ناهمزمان (asyn) منتظر تکمیل یک عملیات دیگر است. برخلاف block_on یک await معمولاً thread فعلی را مسدود نمی‌کند.

  • .await فقط می‌تواند در داخل یک تابع async استفاده شود (یا block؛ این مورد در آینده معرفی می‌شوند).