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
- Markeer je methode als async
- Gebruik await op een asynchrone taak (bijv.
Task
) - Verwerk het resultaat na de await
- Behandel eventuele fouten met try-catch
Tip
Begin klein! Test eerst met simpele async-methodes zoals
Task.Delay()
ofGetStringAsync()
, 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.
Stap Doel 1. async De methode HaalNieuwsOpAsync()
markeer je als async2. await Je wacht met await op het antwoord van GetStringAsync()
3. resultaat Het resultaat wordt weergegeven in de console of op het scherm 4. foutafhandeling Als 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
ofTask<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
metHttpClient
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
ofTimeoutException
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