پاسخ تمرین ۱
create_task باعث میشود coroutine بلافاصله روی Event Loop برای اجرا برنامهریزی شود، بدون اینکه لازم باشد همان لحظه منتظرش بمانیم. یک شیء Task فورا به ما برگردانده میشود که میتوانیم بعدا منتظرش بمانیم، وضعیتش را بررسی کنیم یا حتی قبل از اتمام کارش لفوش کنیم.
پاسخ تمرین ۲
چون هر دو Task قبل از اینکه هیچکدامشان await شوند ساخته میشوند. این یعنی هر دو با هم روی Event Loop شروع به اجرا میکنند و زمانشان روی هم میافتد، پس مدت زمان کل منتظر ماندن با طولانیترین Task تعیین میشود، نه با جمع زدن زمان هر دو با هم.
پاسخ تمرین ۳
متد done نشان میدهد آیا Task کارش را تا همین الان تمام کرده یا نه، با برگرداندن درست یا نادرست. متد result مقداری را که coroutine برگردانده به ما نشان میدهد، اما فقط وقتی که Task واقعا تمام شده باشد؛ صدا زدن آن زودتر از موقع، پاسخ معناداری نمیدهد.
پاسخ تمرین ۴
صدا زدن cancel فقط یک درخواست برای توقف Task میفرستد؛ Task همان لحظه متوقف نمیشود. در عوض، اولین باری که coroutine به یک نقطهی await برسد، asyncio همانجا خطای CancelledError را پرتاب میکند، و همان نقطهای است که میتوانیم آن را بگیریم و بفهمیم Task زودتر از موعد متوقف شده.