8.1 - מכונת המצבים של Future ושל async - תרגול
תרגול - התקדמות השהיה והשמדה¶
תרגיל ראשון - חיזוי רצף הביצוע¶
העתיקו את התוכנית מההרצאה ושנו את העתיד הפנימי כך שיחזיר Pending בשתי הבדיקות הראשונות ואת המספר אחת עשרה בשלישית. כתבו את הפלט הצפוי לפני הרצה. הוסיפו טענה שבודקת את מספר בקשות היקיצה אחרי כל בדיקה. הסבירו מדוע הודעת הכניסה של הפונקציה החיצונית מופיעה רק פעם אחת.
תרגיל שני - השמדה לפני ואחרי תחילת הגוף¶
צרו טיפוס בשם Probe שמגדיל מונה בעת השמדה. העבירו אובייקט אחד כפרמטר לפונקציה אסינכרונית וצרו אובייקט שני בתוך הגוף לפני ההמתנה. בדקו השמדת עתיד לפני הבדיקה הראשונה, אחרי בדיקה שמחזירה המתנה ואחרי השלמה. תעדו בנפרד כמה אובייקטים נוצרו וכמה הושמדו בכל תרחיש.
תרגיל שלישי - המתנה מוכנה מיד¶
החליפו את העתיד הפנימי ב־std::future::ready(11). בדקו אם הקריאה הראשונה לעתיד החיצוני מסתיימת מיד. הסבירו מדוע קיומו של await בקוד אינו מוכיח שהמשימה התפנתה לטובת משימות אחרות. השוו בין מספר הבדיקות למספר בקשות היקיצה.
הגישו קוד עם בדיקות אוטומטיות והסבר של תרשים המצבים לכל תרגיל. אין צורך במנוע ביצוע חיצוני ואין צורך בקוד unsafe.