این پست راهنمای نحوه استفاده از CancellationToken در NET Core Web API با استفاده از یک سرویس پیش‌بینی آب و هوای فرضی است.

مسیر سناریو ما :

برای نشان دادن این موضوع از سرویس نهایی پیش بینی آب و هوا استفاده می کنیم، جزئیاتی مانند دما را برمی گرداند، داده ها به طور تصادفی تولید می شوند. در یک سناریوی دنیای واقعی، این داده ها می توانند در یک پایگاه داده SQL ذخیره شوند یا از یک درخواست HTTP دیگر بازگردانده شوند. بنابراین وقتی شخصی پیش‌بینی آب و هوای محلی را درخواست می‌کند وابستگی وجود دارد، در این مثال تصور کنید که یک داده ذخیره‌سازی است.

برای آزمایش این، پیام‌های کنسول را اضافه کردم تا ببینیم چه خبر است. من همچنین یک Task Delay 5 ثانیه ای اضافه کردم تا یک تماس پایگاه داده را تقلید کنم. با استفاده از Postman   سرویس پیش‌بینی آب و هوای را به صورت Get فراخوانی کردم، پیام‌های کنسول زیر همان‌طور که انتظار می‌رفت به صورت زیر بود.

ایجاد یک خطا(استثنا):

چه اتفاقی می‌افتد اگر… یک کاربر درخواست را ارسال کند و بلافاصله مرورگر را ببندد، به وب‌سایت دیگری پیمایش کند یا یک درخواست را به سرعت و قبل از اتمام درخواست قبلی درخواست کند؟ بیایید بررسی کنیم.

برای تلاش دوم ، سرویس پیش بینی آب و هوا را فراخوانی کردم  اما درخواست را لغو کردم. همانطور که در خروجی کنسول زیر مشاهده می کنید، درخواست تکمیل شد، اگرچه درخواست لغو شد و نتایج همچنان برگردانده شدند.

برای حل این موضوع به منظور محافظت از پایگاه داده و منابع خود، می توانیم از CancellationToken استفاده کنیم. آنها برای کنترل جریان اجرای وظایف، منطق تجاری یا شرایط الگوریتم استفاده می شوند.

اکنون برنامه به پردازش درخواست‌های جدید ادامه می‌دهد، اما اگر درخواستی لغو شود، یک TaskCanceledException ایجاد می‌کند.

در این حالت مزایای زیادی وجود دارد که عبارتند از:

  • لغو عملیات ناهمزمان یا عملیات همزمان طولانی مدت
  • محافظت از منابع پردازشی سیستم(CPU resources,thread pools)
  • اجتناب از تکراری شدن رکوردها هنگام ایجاد، به روز رسانی یا حذف
  • صرفه جویی در زمان با اجرا نکردن Task

خلاصه موضوع:

به طور خلاصه، استفاده از cancellation token عمل خوبی است زیرا باعث صرفه جویی در منابع و زمان می شود. تغییراتی در مورد cancellation در NET 6 وجود دارد که در وبلاگ مایکروسافت تحت عنوان "بهبود عملکرد در NET 6" پوشش داده شده است.

این لینک ها اصول استفاده از CancellationToken را برای مطالعه بیشتر پوشش می دهد:

 

منبع : medium.com