این تمرینها بر پایهی درس کنسلکردن coroutine هستند.
تمرین ۱ (مفهومی)
متد cancel چه کاری روی یک task انجام میدهد؟ وقتی بعد از کنسلشدن دوباره منتظر همان task بمانیم (await)، چه نوع خطایی دریافت میکنیم؟
تمرین ۲ (مفهومی)
asyncio.wait_for هنگام رسیدن timeout چه خطایی پرتاب میکند؟ (دقت کنید که یک اشتباه رایج، گرفتن نوع خطای نادرست است.)
تمرین ۳ (مفهومی)
در مثال اول، کد یک حلقه مینویسد که هر بار بررسی میکند task تمام شده یا نه و بعد از مدتی آن را کنسل میکند. بهجای این حلقهی دستی، چه روش سادهتری برای همین کار وجود دارد؟
تمرین ۴ (مفهومی)
متد shield چه کاری برای یک task انجام میدهد؟ اگر با وجود shieldشدن، مهلت زمانی (timeout) تمام شود چه اتفاقی میافتد؟
تمرین ۵ (مفهومی)
بعد از اینکه یک task محافظتشده با shield بهدلیل پایان مهلت، TimeoutError ایجاد کرد، در قسمت except دوباره منتظر همان task میمانیم. چرا این await اضافه لازم است؟
تمرین ۶ (کد)
یک دانلود ۶ ثانیهای را شبیهسازی کنید و بهصورت دستی (با یک حلقه و cancel) کاری کنید که اگر تا ۵ ثانیه تمام نشد کنسل شود و پیام مناسب چاپ گردد.
تمرین ۷ (کد)
همان کار را این بار با asyncio.wait_for و timeout=5 و گرفتن نوع خطای درست بنویسید.
تمرین ۸ (کد واقعی)
یک تابع بنویسید که یک call_api کند (شبیهسازیشده با sleep[10]) اما اگر پاسخ در ۳ ثانیه نرسید، بهجای معطلماندن یک مقدار پیشفرض برگرداند.