Junior — Middle
É possível interromper a execução de uma função assíncrona iniciada com async?
sobes.tech IA
Resposta da IA
As funções assíncronas, executadas através de async, por si só não podem ser simplesmente «interrompidas» ou «paradas» de fora, pois não suportam cancelamento forçado.
Para gerir o cancelamento de operações assíncronas no Android (e em geral no C#), utiliza-se o mecanismo CancellationToken.
Como funciona:
- Um objeto CancellationToken é passado para a função.
- Dentro da função, verifica-se periodicamente o estado do token (por exemplo, token.IsCancellationRequested).
- Se o cancelamento for solicitado, a função termina corretamente, lançando uma OperationCanceledException ou simplesmente retornando um resultado.
Exemplo:
async Task DoWorkAsync(CancellationToken token)
{
for(int i = 0; i < 100; i++)
{
token.ThrowIfCancellationRequested();
await Task.Delay(100); // simulação de trabalho
}
}
// Uso
var cts = new CancellationTokenSource();
var task = DoWorkAsync(cts.Token);
// Para cancelar:
cts.Cancel();
Assim, o cancelamento é um processo cooperativo, e a função deve ser escrita com suporte para CancellationToken.