Meer informatie over async en await

1 Doel

Async en await maken het mogelijk om asynchrone operaties uit te voeren zonder dat je applicatie of gebruikersinterface “bevriest”. In dit stappenplan leer je hoe je async en await correct toepast in een C#-applicatie, bijvoorbeeld om netwerk- of bestandstaken uit te voeren.

2 Stappenplan

  1. Markeer je methode als async
  2. Gebruik await op een asynchrone taak (bijv. Task)
  3. Verwerk het resultaat na de await
  4. Behandel eventuele fouten met try-catch

Tip

Begin klein! Test eerst met simpele async-methodes zoals Task.Delay() of GetStringAsync(), voordat je complexe logica toevoegt.

  • Task.Delay(): Creëert een Task die voltooid wordt nadat een aangegeven hoeveelheid millisecondes zijn verstreken.
  • GetStringAsync(): Verstuurt een GET request naar een URI en geeft de response body terug als een string in een asynchrone operatie.

Casus

Je ontwikkelt een applicatie die nieuwsberichten van een externe API ophaalt. De lezer mag ondertussen gewoon verder werken met andere functies van de app.

StapDoel
1. asyncDe methode HaalNieuwsOpAsync() markeer je als async
2. awaitJe wacht met await op het antwoord van GetStringAsync()
3. resultaatHet resultaat wordt weergegeven in de console of op het scherm
4. foutafhandelingAls de API offline is, toon je een nette foutmelding

2.1 Markeer je methode als async

Voeg het keyword async toe aan je methode en geef als returntype Task of Task<T> terug.

public async Task<string> HaalNieuwsOpAsync()

Correctieve feedback tijdens de uitvoer

  • Vergeet niet: een async methode moet een Task of Task<T> teruggeven.
  • Je kunt async void gebruiken, maar dit wordt alleen aangeraden voor event handlers.

Tips voor stap 2.1

  • Gebruik Task als je niets teruggeeft, Task<T> als je een resultaat terugstuurt.
  • Begin bij voorkeur bij Main() of een duidelijke entrypoint.

2.2 Gebruik await op een asynchrone taak

Gebruik await voor elke bewerking die tijd kan kosten, zoals netwerk- of bestandsacties.

string inhoud = await client.GetStringAsync(url);

Correctieve feedback tijdens de uitvoer

  • Je mag await alleen gebruiken binnen een async methode.

Tips voor stap 2.2

  • Combineer using met HttpClient om resources automatisch op te ruimen.
  • Gebruik ConfigureAwait(false) alleen bij libraries zonder UI (voor gevorderden).

2.3 Verwerk het resultaat na de await

Zodra de taak voltooid is, kun je direct het resultaat gebruiken.

Console.WriteLine($"Nieuws ontvangen: {inhoud}");

Correctieve feedback tijdens de uitvoer

  • Zorg dat je pas met het resultaat werkt ná de await, anders krijg je foutmeldingen of null-waarden.

Tips voor stap 2.3

  • Gebruik logging om te controleren of de taak daadwerkelijk voltooid is.
  • Vermijd afhankelijkheden tussen meerdere async-methodes als dat niet nodig is.

2.4 Behandel eventuele fouten met try-catch

Async-methodes kunnen uitzonderingen genereren (zoals netwerkfouten). Gebruik try-catch om dit netjes op te vangen.

try
{
    string inhoud = await client.GetStringAsync(url);
}
catch (HttpRequestException ex)
{
    Console.WriteLine($"Fout bij ophalen: {ex.Message}");
}

Correctieve feedback tijdens de uitvoer

  • Vergeet niet fouttypes zoals HttpRequestException of TimeoutException specifiek te vangen.
  • Gebruik Exception.Message voor een korte foutuitleg aan de gebruiker.

Tips voor stap 2.4

  • Toon nooit volledige stacktraces aan eindgebruikers.
  • Log intern wél de volledige fout voor debugdoeleinden.

Samenvattend

Tips Async en Await

  • Begin altijd met een simpele async-methode.
  • Test of je UI nog reageert tijdens de async-opdracht.
  • Gebruik try-catch bij netwerkoperaties om crashen te voorkomen.
  • Gebruik duidelijke methodenamen zoals HaalDataOpAsync().

Volgende stap: Oefeningen Async en Await