CodeBlanks Logo Icon CodeBlanks

CancellationToken

C# kursu · İleri seviye · Ders 11/83

CancellationToken ile task'ı iptal etmeyi öğrenirsin.

CancellationToken nedir?

CancellationToken, uzun bir işi dışarıdan iptal etmenin standart yoludur. Bir CancellationTokenSource üretir, ondan bir Token alıp metoda geçirirsin. İptal etmek için cts.Cancel(); çağırırsın.

Metot içinde token.ThrowIfCancellationRequested() ile her döngü adımında kontrol edersin. İptal istenmişse OperationCanceledException fırlatılır. Bu, iş parçacığını zorla öldürmekten daha güvenlidir.

ThrowIfCancellationRequested

Bir döngü içinde token.ThrowIfCancellationRequested() çağırarak iptali denetlersin. İptal istenmişse bu çağrı hemen OperationCanceledException fırlatır; değilse bir şey yapmaz. Bu nedenle çağrı ucuz ve sık yapılabilir.

İptal edilen metot genellikle OperationCanceledException fırlatır; çağıran bunu catch ile yakalar ve iptali beklenen bir sonuç olarak yorumlar. İptal bir hata değil, beklenen bir denetim akışıdır.

Uygulama CancellationToken ile döngü

static async Task<int> CountAsync(CancellationToken token) metodunu tanımla. Gövdede int sum = 0; ile başla, for (int i = 1; i <= 3; i++) döngüsünde her adımda token.ThrowIfCancellationRequested();, await Task.CompletedTask; ve sum += i; yap; döngüden sonra return sum;. Main'i static async Task Main yap; var cts = new CancellationTokenSource(); ile kaynak oluştur, int total = await CountAsync(cts.Token); ile çağır ve Console.WriteLine(total); ile yazdır.

Örnek çözümü göster
CountAsync gövdesinde int sum = 0; ile başla. for (int i = 1; i <= 3; i++) döngüsünde token.ThrowIfCancellationRequested(); await Task.CompletedTask; sum += i; yap. Döngüden sonra return sum;. Main'i static async Task Main() yapıp var cts = new CancellationTokenSource(); int total = await CountAsync(cts.Token); Console.WriteLine(total);
Örnek çözüm:
using System;
using System.Threading;
using System.Threading.Tasks;

class Program
{
    static async Task<int> CountAsync(CancellationToken token)
    {
        int sum = 0;
        for (int i = 1; i <= 3; i++)
        {
            token.ThrowIfCancellationRequested();
            await Task.CompletedTask;
            sum += i;
        }
        return sum;
    }

    static async Task Main()
    {
        var cts = new CancellationTokenSource();
        int total = await CountAsync(cts.Token);
        Console.WriteLine(total);
    }
}

Kendini test et

  1. CancellationTokenSource oluştur

    var cts = new CancellationToken____();
    Cevabı göster
    var cts = new CancellationTokenSource();
  2. İptal etmek için ne çağrılır?

    • token.Cancel()
    • cts.Cancelled = true
    • cts.Stop()
    • cts.Cancel()
    Cevabı göster

    cts.Cancel() — Doğru. cts.Cancel() iptali tetikler; token ThrowIfCancellationRequested'i fırlatır.

  3. CancellationToken kavramlarını eşleştir

    CancellationTokenSource
    İptal kaynağı
    Token
    Metoda geçirilen denetim
    ThrowIfCancellationRequested
    İptal varsa fırlatır
    cts.Cancel()
    İptali tetikler

İleri seviye bölümündeki tüm dersler