Sobes.tech
Junior — Middle

Koje metode možete koristiti za otkazivanje izvršenja zadatka u sistemu?

sobes.tech АИ

Одговор од АИ

U C#-u se obično koristi mehanizam CancellationToken za otkazivanje izvršavanja zadatka (Task). Glavne metode otkazivanja:

  1. CancellationTokenSource — kreira token za otkazivanje.
  2. Prosljeđivanje CancellationToken u zadatak ili asinhronu metodu.
  3. Unutar zadatka, periodično provjeravanje svojstva token.IsCancellationRequested ili pozivanje token.ThrowIfCancellationRequested().
  4. Pozivanje CancellationTokenSource.Cancel() za zahtjev za otkazivanje.

Primjer:

var cts = new CancellationTokenSource();
var token = cts.Token;

var task = Task.Run(() => {
    for (int i = 0; i < 100; i++) {
        token.ThrowIfCancellationRequested();
        // rad
        Thread.Sleep(100);
    }
}, token);

// Otkazivanje zadatka
cts.Cancel();

try {
    task.Wait();
} catch (AggregateException ex) {
    if (ex.InnerExceptions.Any(e => e is OperationCanceledException)) {
        Console.WriteLine("Zadatak je otkazan");
    }
}

Dakle, otkazivanje je kooperativni proces, gdje zadatak sam mora održavati provjeru tokena otkazivanja.