Skip to content

Instantly share code, notes, and snippets.

@AbduvaliMamatov
Last active July 10, 2025 04:02
Show Gist options
  • Select an option

  • Save AbduvaliMamatov/f617bca4affa60326f74de832970a11e to your computer and use it in GitHub Desktop.

Select an option

Save AbduvaliMamatov/f617bca4affa60326f74de832970a11e to your computer and use it in GitHub Desktop.
CancellationToken

🛑 CancellationToken: Asinxron Operatsiyalarni Boshqarishning Muhim Mexanizmi

Zamonaviy ilovalarda foydalanuvchi tajribasi har qachongidan ham muhimroq. Foydalanuvchilar ilovalar tezkor va sezgir bo'lishini kutishadi. Agar biror operatsiya uzoq davom etsa, uni bekor qilish imkoniyati bo'lishi kerak. Aynan shu yerda .NET freymvorkidagi CancellationToken mexanizmi yordamga keladi.


❓ Nima uchun CancellationToken kerak?

🎯 Muammo: Resurslarni behuda sarflash

Tasavvur qiling, siz onlayn kitob doʻkoni ilovasini ishlab chiqyapsiz. Foydalanuvchi kitob nomini kiritadi va ilova bir nechta yirik maʼlumotlar bazalaridan (Amazon, Google Books, mahalliy kutubxona) maʼlumot qidiradi.

Foydalanuvchi "Harry Potter" deb qidiruvni boshladi. Ilova uchta manbaga so‘rov yuboradi. Birinchi ikkitasidan javob tez keladi, lekin uchinchisi (masalan, uzoqdagi arxiv kutubxonasi) juda sekin ishlaydi. Foydalanuvchi kutmay, yangi "Dune" kitobini qidiradi.

Agar CancellationToken ishlatilmasa:

  • Ilova hanuz "Harry Potter" so‘rovini bajaradi
  • Resurslar (CPU, tarmoq) bekor ketadi
  • UX yomonlashadi

🛠 CancellationToken bilan yechim

CancellationToken bu muammoni hal qilish uchun quyidagi tarzda ishlaydi:

  1. CancellationTokenSource obyektini yaratish
  2. CancellationToken ni asinxron funksiyalarga uzatish
  3. Operatsiya davomida token.IsCancellationRequested orqali to‘xtatish holatini tekshirish
  4. Cancel() metodi orqali barcha faol vazifalarni bekor qilish

🌟 Nima uchun CancellationToken muhim?

🔋 Afzalliklari:

  • Resurslarni tejaydi: Bekor qilingan ishlar CPU/xotirani band qilmaydi.
  • Tezroq javob beradi: Ilova yangi so‘rovlarga tezlik bilan reaksiya beradi.
  • 🧑‍💻 Foydalanuvchi tajribasi oshadi: Bekor qilish imkoniyati UXni oshiradi.
  • 🧱 Barqarorlikni saqlaydi: Uzoq operatsiyalar tizimni ishdan chiqarmaydi.

💻 C# Kod Misoli

using System;
using System.Threading;
using System.Threading.Tasks;

public class Program
{
    public static async Task Main(string[] args)
    {
        Console.WriteLine("Vazifani boshlash...");
        using var cts = new CancellationTokenSource();
        CancellationToken token = cts.Token;

        try
        {
            Task task = DoWorkAsync(5000, token);

            await Task.Delay(1000);
            cts.Cancel();
            Console.WriteLine("Vazifa bekor qilish signali yuborildi.");

            await task;
        }
        catch (OperationCanceledException)
        {
            Console.WriteLine("Vazifa muvaffaqiyatli bekor qilindi!");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Xatolik: {ex.Message}");
        }

        Console.WriteLine("Dastur tugadi.");
    }

    public static async Task DoWorkAsync(int delayMs, CancellationToken cancellationToken)
    {
        try
        {
            Console.WriteLine($"Ish boshlandi, {delayMs / 1000} soniya kutilyapti...");
            await Task.Delay(delayMs, cancellationToken);
            Console.WriteLine("Ish muvaffaqiyatli yakunlandi.");
        }
        catch (OperationCanceledException)
        {
            Console.WriteLine("Bekor qilish so'rovi qabul qilindi.");
            throw;
        }
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment