Join

عملیات پیوستن (join) منتظر می‌ماند تا تمام مجموعه‌ای از futureها آماده شوند و مجموعه‌ای (collection) از نتایج آنها را برمی‌گرداند. این شبیه به Promise.all در JavaScript یا asyncio.gather در پایتون است.

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Speaker Notes

This slide should take about 4 minutes.

این مثال را در src/main.rs آماده شده خود کپی کنید و آن را از آنجا اجرا کنید.

  • برای چند future از تایپ‌های مختلف، می‌توانید از std::future::join! استفاده کنید، اما باید بدانید که در زمان کامپایل چند future خواهید داشت. این در حال حاضر در جعبه (crate از نوع futures است که به زودی در std::future تثبیت می‌شود.

  • خطر join این است که یکی از future‌ها ممکن است هرگز resolve نشود، این مسئله باعث می‌شود برنامه شما متوقف شود.

  • همچنین می‌توانید join_all را با join! ترکیب کنید، به‌عنوان مثال برای پیوستن (join!) همه درخواست‌ها به یک سرویس http و همچنین یک کوئری پایگاه داده سعی کنید tokio::time::sleep را با استفاده از futures::join! به future اضافه کنید. این یک timeout نیست (که به select!نیاز دارد و در فصل بعدی توضیح داده ‌می‌شود) بلکه join! را نشان می‌دهد.