</>مدرسه زیب‌موجیاد بگیر، تمرین کن، بساز
مدرسهC#درس 6
درس 6 از 8 · ۷۵ دقیقه

async/await، HttpClient و لغو عملیات

الگوی Task، درخواست I/O، CancellationToken و مدیریت خطا را در سرویس قیمت تمرین می‌کنی.

۰امتیاز شما
نقشه این درس

بعد از این درس چه کاری می‌توانی انجام بدهی؟

  • Task و Task<T> را توضیح بدهی
  • متد async قابل انتظار بنویسی
  • لغو و خطای HTTP را مدیریت کنی
به زبان زندگی واقعی

C# را ساده بفهم

C# مثل یک کارگاه مهندسی با قراردادهای روشن است؛ نوع‌ها، کلاس‌ها و interfaceها کمک می‌کنند اجزای اپ، وب‌سرویس یا بازی جدا اما هماهنگ کار کنند.

نکته مهم برای شروع C#

استفاده از .Result یا .Wait روی مسیر async می‌تواند block و در برخی محیط‌ها deadlock ایجاد کند؛ async را در زنجیره ادامه بده.

چرا مهم است؟ عملیاتی را نمایندگی می‌کند که بعداً T تولید می‌کند.

اولین تمرین تو: timeout و پاسخ بدون Price را طراحی کن و مشخص کن کاربر چه پیام و لاگ چه جزئیاتی دریافت کند.

توضیح ساده و قدم‌به‌قدم

از یک مثال کوچک شروع کن

متد async برای I/O معمولاً Task یا Task<T> برمی‌گرداند. از async void به‌جز event handler دوری کن، چون await و مدیریت exception را دشوار می‌کند. HttpClient را برای هر درخواست نساز؛ چرخه عمر آن را مدیریت یا از factory استفاده کن.

1

۱. قرارداد async بنویس

Task<decimal> نوع نتیجه را روشن می‌کند.

2

۲. لغو را عبور بده

CancellationToken از ورودی تا HTTP منتقل می‌شود.

3

۳. پاسخ را معتبر کن

status و JSON نامعتبر مسیر خطای مشخص دارند.

نکته مهم

استفاده از .Result یا .Wait روی مسیر async می‌تواند block و در برخی محیط‌ها deadlock ایجاد کند؛ async را در زنجیره ادامه بده.

مفهوم‌های اصلی

سه قطعه‌ای که باید بفهمی

Task<T>

عملیاتی را نمایندگی می‌کند که بعداً T تولید می‌کند.

await

ادامه متد را تا تکمیل Task معلق می‌کند و thread را بی‌دلیل block نمی‌کند.

CancellationToken

درخواست لغو هماهنگ را میان لایه‌ها منتقل می‌کند.

سناریوی واقعی

دریافت قیمت کالا از سرویس بیرونی

سرویس بیرونی ممکن است کند یا ناموفق باشد. درخواست کاربر باید قابل لغو باشد و خطای فنی به پاسخ کنترل‌شده تبدیل شود.

ورودی روشنیک تغییر کوچکنتیجه قابل سنجش
بازی ساختن کد

قطعه‌ها را به ترتیب درست بچین

روی هر قطعه بزن تا وارد پاسخ شود؛ برای برگرداندن دوباره روی آن بزن. با دکمه‌های جابه‌جایی هم می‌توانی بدون کشیدن و رهاکردن ترتیب را اصلاح کنی.

مرحله ۲ از ۳ · مرتب‌کردن کد
بانک قطعه‌هاقطعه مناسب را انتخاب کن
ترتیب پاسخ تواز بالا به پایین اجرا می‌شود

    هنوز پاسخی بررسی نشده است.

    کارگاه تعاملی

    بررسی ساختار تمرین

    این صفحه کامپایلر کامل C# نیست؛ ساختار تمرین را صادقانه بررسی می‌کند و خروجی مورد انتظار را نشان می‌دهد. برای اجرای کامل به محیط رسمی همان زبان نیاز است.

    PriceClient.cs
    خروجیآماده
    یک بخش را تغییر بده و دکمه بررسی را بزن.
    بعد از هر تغییر، نتیجه را دوباره بررسی کن.
    تمرین هدایت‌شده

    timeout و پاسخ بدون Price را طراحی کن و مشخص کن کاربر چه پیام و لاگ چه جزئیاتی دریافت کند.

    دام‌های رایج

    این سه اشتباه را انجام نده

    1

    async void خارج از event handler

    2

    ساخت HttpClient برای هر درخواست

    3

    نادیده‌گرفتن CancellationToken

    سنجش چندمرحله‌ای

    با 5 سؤال مطمئن شو که مفهوم را گرفته‌ای

    سؤال 1 از 5

    متد async با نتیجه decimal چه نوعی برمی‌گرداند؟

    سؤال 2 از 5

    CancellationToken چه کاربردی دارد؟

    سؤال 3 از 5

    چرا async void معمولاً بد است؟

    سؤال 4 از 5

    کدام روش نشان می‌دهد این درس را واقعاً فهمیده‌ای؟

    سؤال 5 از 5

    کدام رفتار احتمال خطا را در همین موضوع بیشتر می‌کند؟

    پایان درس 6

    فهمیدی، تغییر دادی، نتیجه را توضیح دادی؟

    فقط در این صورت درس را کامل کن و سراغ مرحله بعد برو.