Sobes.tech
Junior — Middle

Kan de uitvoering van een asynchrone functie gestart via async worden onderbroken?

sobes.tech AI

Antwoord van AI

Asynchrone functies, gestart via async, kunnen niet eenvoudig van buitenaf worden «onderbroken» of «gestopt», omdat ze geen geforceerde annulering ondersteunen.

Om het annuleren van asynchrone operaties in Android (en in het algemeen in C#) te beheren, wordt het mechanisme CancellationToken gebruikt.

Hoe het werkt:

  • Een CancellationToken-object wordt aan de functie doorgegeven.
  • Binnen de functie wordt de status van de token periodiek gecontroleerd (bijvoorbeeld, token.IsCancellationRequested).
  • Als annulering wordt aangevraagd, eindigt de functie correct door een OperationCanceledException te werpen of gewoon een resultaat terug te geven.

Voorbeeld:

async Task DoWorkAsync(CancellationToken token)
{
    for(int i = 0; i < 100; i++)
    {
        token.ThrowIfCancellationRequested();
        await Task.Delay(100); // simulatie van werk
    }
}

// Gebruik
var cts = new CancellationTokenSource();
var task = DoWorkAsync(cts.Token);
// Om te annuleren:
cts.Cancel();

Op deze manier is annulering een coöperatief proces, en de functie moet worden geschreven met ondersteuning voor CancellationToken.