Sobes.tech
Back to questions
Junior — Middle
76

Как деактивировать или отменить выполненную задачу в системе?

Answer from AI

sobes.tech AI

В C# для деактивации или отмены выполняемой задачи (Task) обычно используют механизм отмены через CancellationToken.

Основные шаги:

  1. Создаётся CancellationTokenSource, который выдаёт CancellationToken.
  2. При запуске задачи передаётся этот токен.
  3. Внутри задачи периодически проверяется token.IsCancellationRequested и при необходимости выбрасывается OperationCanceledException или задача завершается.
  4. Для отмены вызывается CancellationTokenSource.Cancel().

Пример:

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

var task = Task.Run(() => {
    for (int i = 0; i < 100; i++)
    {
        if (token.IsCancellationRequested)
        {
            Console.WriteLine("Задача отменена");
            token.ThrowIfCancellationRequested();
        }
        // Работа задачи
        Thread.Sleep(100);
    }
}, token);

// Для отмены задачи
cts.Cancel();

try
{
    task.Wait();
}
catch (AggregateException ex) when (ex.InnerExceptions.Any(e => e is OperationCanceledException))
{
    Console.WriteLine("Задача была отменена корректно.");
}

Важно: нельзя просто "принудительно" остановить задачу, нужно предусмотреть поддержку отмены внутри самой задачи.