Sobes.tech
Junior — Middle

Kokiais metodais galima atšaukti užduoties vykdymą sistemoje?

sobes.tech AI

Atsakymas iš AI

C# kalboje dažniausiai naudojamas CancellationToken mechanizmas užduoties (Task) vykdymo atšaukimui. Pagrindiniai atšaukimo metodai:

  1. CancellationTokenSource — sukuria atšaukimo žetoną.
  2. Perduoti CancellationToken užduočiai ar asinchroninei funkcijai.
  3. Viduje užduoties, periodiškai tikrinti token.IsCancellationRequested arba iškviesti token.ThrowIfCancellationRequested().
  4. Iškviesti CancellationTokenSource.Cancel() norint prašyti atšaukimo.

Pavyzdys:

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

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

// Atšaukti užduotį
cts.Cancel();

try {
    task.Wait();
} catch (AggregateException ex) {
    if (ex.InnerExceptions.Any(e => e is OperationCanceledException)) {
        Console.WriteLine("Užduotis buvo atšaukta");
    }
}

Taigi, atšaukimas yra kooperacinis procesas, kuriame užduotis pati turi palaikyti atšaukimo žetono tikrinimą.