0Pricing
C# Academy · Ders

CancellationToken kalıpları; iş birliğine dayalı iptal

CancellationToken aktarın ve ona uyun: CTS oluşturun, iptal için yoklayın/istisna fırlatın, async API'lere aktarın ve kayıtlarla temizleyin.

CancellationToken kalıpları; iş birliğine dayalı iptal, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 3 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 3 dersten oluşur.

İşbirlikli iptal

Amaç: Çalışmayı işbirlikli olarak iptal edin.

  • Bir CancellationTokenSource oluşturun
  • CancellationToken'ı alt katmanlara iletin
  • IsCancellationRequested'ı denetleyin veya ThrowIfCancellationRequested() çağırın
  • İptal isteğine hızlı ve temiz biçimde uyun

Çağıran tarafın yönettiği iptal

Bir CancellationTokenSource oluşturun, belirteci iletin ve çağıran taraftan ipal edin; çağrılan yöntem OperationCanceledException fırlatır.

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

public class Program
{
  static async Task WorkAsync(CancellationToken ct)
  {
    // Poll occasionally; throw to end cooperatively
    for (int i = 0; i < 5; i++)
    {
      ct.ThrowIfCancellationRequested();
      Console.WriteLine("Step " + i);
      await Task.Delay(100, ct); // pass token to async API
    }
  }

  public static void Main(string[] args)
  {
    var cts = new CancellationTokenSource();
    Task t = WorkAsync(cts.Token);

    // Cancel after a short delay (simulated user action)
    Thread.Sleep(180);
    cts.Cancel();

    try
    {
      t.GetAwaiter().GetResult();
    }
    catch (OperationCanceledException)
    {
      Console.WriteLine("Canceled!");
    }
  }
}

Belirteçleri iletme

İç çağrıların hızlıca durabilmesi için belirteci her async katmandan iletin.

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

public class Program
{
  static async Task<string> FetchAsync(CancellationToken ct)
  {
    await Task.Delay(80, ct); // pretend I/O
    ct.ThrowIfCancellationRequested();
    return "data";
  }

  static async Task<string> ProcessAsync(CancellationToken ct)
  {
    string raw = await FetchAsync(ct); // forward token
    await Task.Delay(80, ct);
    return raw.ToUpperInvariant();
  }

  public static void Main(string[] args)
  {
    var cts = new CancellationTokenSource();
    Task<string> job = ProcessAsync(cts.Token);
    cts.CancelAfter(100); // schedule a cancellation
    try
    {
      Console.WriteLine(job.GetAwaiter().GetResult());
    }
    catch (OperationCanceledException)
    {
      Console.WriteLine("Pipeline canceled");
    }
  }
}

token.Register ile temizleme

İptal istendiğinde çalışacak küçük bir temizleme işlemi eklemek için token.Register kullanın.

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

public class Program
{
  static async Task UseRegistrationAsync(CancellationToken ct)
  {
    using (ct.Register(() => Console.WriteLine("Cleanup: releasing temp resources")))
    {
      for (int i = 0; i < 3; i++)
      {
        ct.ThrowIfCancellationRequested();
        await Task.Delay(120, ct);
        Console.WriteLine("Tick " + i);
      }
    }
  }

  public static void Main(string[] args)
  {
    var cts = new CancellationTokenSource();
    Task t = UseRegistrationAsync(cts.Token);
    Thread.Sleep(150);
    cts.Cancel();
    try { t.GetAwaiter().GetResult(); }
    catch (OperationCanceledException) { Console.WriteLine("Canceled with cleanup"); }
  }
}

Bağlantılı kaynaklar

CreateLinkedTokenSource, birden çok sinyali (ör. kullanıcı iptali + zaman aşımı) tek bir belirteçte birleştirir.

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

public class Program
{
  static async Task WorkAsync(CancellationToken ct)
  {
    await Task.Delay(500, ct);
    Console.WriteLine("Finished work");
  }

  public static void Main(string[] args)
  {
    var parent = new CancellationTokenSource();
    var timeout = new CancellationTokenSource();
    timeout.CancelAfter(200);

    // Link both sources: cancel if parent OR timeout requests
    var linked = CancellationTokenSource.CreateLinkedTokenSource(parent.Token, timeout.Token);

    Task t = WorkAsync(linked.Token);
    try { t.GetAwaiter().GetResult(); }
    catch (OperationCanceledException) { Console.WriteLine("Canceled by parent/timeout"); }
    finally { linked.Dispose(); parent.Dispose(); timeout.Dispose(); }
  }
}

En iyi uygulamalar

İpuçları:

  • Hızlıca durabilmeleri için belirteçleri async API'lere (Task.Delay, G/Ç işlemleri) iletin.
  • Çalışmayı sonlandırmak için OperationCanceledException fırlatın; bu özel durumu yutmayın.
  • Zamanlayıcılara veya kayıt işlemlerine sahip olan CancellationTokenSource nesnelerini Dispose edin.
  • İşleyicileri hızlı tutun; Register içinde en az işi yapın.

İşbirlikli iptal kuralı

Hızlı kontrol: Bir yöntem, iptal isteğine doğru şekilde nasıl yanıt vermelidir?

Özet

Özet: İptali işbirlikli hâle getirin; belirteçleri iletin, yoklayın veya ThrowIfCancellationRequested çağırın, küçük bir temizleme işlemi ekleyin ve birleşik sinyaller için kaynakları bağlayın.

Sıkça Sorulan Sorular

“CancellationToken kalıpları; iş birliğine dayalı iptal” dersi ücretsiz mi?

Evet — “CancellationToken kalıpları; iş birliğine dayalı iptal” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 3 dersten oluşur.

“CancellationToken kalıpları; iş birliğine dayalı iptal” dersinde ne öğreneceğim?

CancellationToken aktarın ve ona uyun: CTS oluşturun, iptal için yoklayın/istisna fırlatın, async API'lere aktarın ve kayıtlarla temizleyin. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C# Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 3 dersinin 1. dersidir.

“CancellationToken kalıpları; iş birliğine dayalı iptal” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. CancellationToken kalıpları; iş birliğine dayalı iptal
  2. Zaman aşimleri, IProgress ve async kaynak temizleme (öykünme)
  3. Dayanıklılığın temelleri: yeniden deneme ve geri çekilme
← C# Academy Sayfasına Dön