Sobes.tech
Назад к вопросам
Junior — Middle
81

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

Компании, где спрашивали
X5 DigitalX5 Digital

Ответ от нейросети

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.