Junior — Middle
109
Можно ли прервать выполнение асинхронной функции, запущенной через async?
Сұралған компаниялар
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.