Sobes.tech
Junior — Middle
109

Можно ли прервать выполнение асинхронной функции, запущенной через async?

Сұралған компаниялар
X5 DigitalX5 Digital

AI-дан жауап

sobes.tech AI

Асинхронные функции, запущенные через async, сами по себе нельзя просто «прервать» или «остановить» извне, так как они не поддерживают принудительную отмену.

Для управления отменой асинхронных операций в Android (и в целом в C#) используется механизм CancellationToken.

Как это работает:

  • В функцию передаётся объект CancellationToken.
  • Внутри функции периодически проверяется состояние токена (например, token.IsCancellationRequested).
  • Если отмена запрошена, функция корректно завершает работу, выбрасывая OperationCanceledException или просто возвращая результат.

Пример:

async Task DoWorkAsync(CancellationToken token)
{
    for(int i = 0; i < 100; i++)
    {
        token.ThrowIfCancellationRequested();
        await Task.Delay(100); // имитация работы
    }
}

// Использование
var cts = new CancellationTokenSource();
var task = DoWorkAsync(cts.Token);
// Чтобы отменить:
cts.Cancel();

Таким образом, отмена — это кооперативный процесс, и функция должна быть написана с поддержкой CancellationToken.