بعد از این درس چه کاری میتوانی انجام بدهی؟
- Task و Task<T> را توضیح بدهی
- متد async قابل انتظار بنویسی
- لغو و خطای HTTP را مدیریت کنی
C# را ساده بفهم
C# مثل یک کارگاه مهندسی با قراردادهای روشن است؛ نوعها، کلاسها و interfaceها کمک میکنند اجزای اپ، وبسرویس یا بازی جدا اما هماهنگ کار کنند.
استفاده از .Result یا .Wait روی مسیر async میتواند block و در برخی محیطها deadlock ایجاد کند؛ async را در زنجیره ادامه بده.
چرا مهم است؟ عملیاتی را نمایندگی میکند که بعداً T تولید میکند.
اولین تمرین تو: timeout و پاسخ بدون Price را طراحی کن و مشخص کن کاربر چه پیام و لاگ چه جزئیاتی دریافت کند.
از یک مثال کوچک شروع کن
متد async برای I/O معمولاً Task یا Task<T> برمیگرداند. از async void بهجز event handler دوری کن، چون await و مدیریت exception را دشوار میکند. HttpClient را برای هر درخواست نساز؛ چرخه عمر آن را مدیریت یا از factory استفاده کن.
۱. قرارداد async بنویس
Task<decimal> نوع نتیجه را روشن میکند.
۲. لغو را عبور بده
CancellationToken از ورودی تا HTTP منتقل میشود.
۳. پاسخ را معتبر کن
status و JSON نامعتبر مسیر خطای مشخص دارند.
استفاده از .Result یا .Wait روی مسیر async میتواند block و در برخی محیطها deadlock ایجاد کند؛ async را در زنجیره ادامه بده.
سه قطعهای که باید بفهمی
Task<T>
عملیاتی را نمایندگی میکند که بعداً T تولید میکند.
await
ادامه متد را تا تکمیل Task معلق میکند و thread را بیدلیل block نمیکند.
CancellationToken
درخواست لغو هماهنگ را میان لایهها منتقل میکند.
دریافت قیمت کالا از سرویس بیرونی
سرویس بیرونی ممکن است کند یا ناموفق باشد. درخواست کاربر باید قابل لغو باشد و خطای فنی به پاسخ کنترلشده تبدیل شود.
قطعهها را به ترتیب درست بچین
روی هر قطعه بزن تا وارد پاسخ شود؛ برای برگرداندن دوباره روی آن بزن. با دکمههای جابهجایی هم میتوانی بدون کشیدن و رهاکردن ترتیب را اصلاح کنی.
بررسی ساختار تمرین
این صفحه کامپایلر کامل C# نیست؛ ساختار تمرین را صادقانه بررسی میکند و خروجی مورد انتظار را نشان میدهد. برای اجرای کامل به محیط رسمی همان زبان نیاز است.
یک بخش را تغییر بده و دکمه بررسی را بزن.
راهنماییها مرحلهای هستند؛ اول خودت پیام خطا را بخوان.
timeout و پاسخ بدون Price را طراحی کن و مشخص کن کاربر چه پیام و لاگ چه جزئیاتی دریافت کند.
این سه اشتباه را انجام نده
async void خارج از event handler
ساخت HttpClient برای هر درخواست
نادیدهگرفتن CancellationToken
با 5 سؤال مطمئن شو که مفهوم را گرفتهای
متد async با نتیجه decimal چه نوعی برمیگرداند؟
CancellationToken چه کاربردی دارد؟
چرا async void معمولاً بد است؟
کدام روش نشان میدهد این درس را واقعاً فهمیدهای؟
کدام رفتار احتمال خطا را در همین موضوع بیشتر میکند؟
فهمیدی، تغییر دادی، نتیجه را توضیح دادی؟
فقط در این صورت درس را کامل کن و سراغ مرحله بعد برو.