Het gebruik van await in C#

Geschreven door: op zaterdag 28 maart 2020

Leestijd:

Binnen applicaties kunnen soms functies voorkomen die lang nodig hebben om te voltooien. Denk bijvoorbeeld aan een call naar een API van een derde partij die veel data teruggeeft die verwerkt moet worden. Het is dan niet gebruiksvriendelijk om te wachten met uitvoeren van andere functionaliteiten totdat de call naar de API klaar is. Dit kan voor problemen zorgen, want het kan dan net lijken of je applicatie is gestopt met werken voor gebruikers van je applicatie. Hoe je dit kunt oplossen, is door het gebruik van await.

Stel, je hebt de volgende code:

In deze functie doe je eerst een call naar een API die data teruggeeft. Daarna gaat een andere functie deze data verwerken. Deze functie duurt lang aangezien het om veel data kan gaan. In de code zoals deze nu is, zal de code wachten tot de lang durende taak is afgerond voordat het de andere functies gaat uitvoeren, ook al hebben de andere functies de verwerkte data niet nodig.

Dit kun je oplossen door await te gebruiken. Met await geef je aan dat een functie uitgevoerd kan worden zonder dat de code wacht tot de functie klaar is. Wel belangrijk, met het gebruik van await wordt er geen nieuwe thread aan maar wordt gebruik gemaakt van dezelfde thread.

Met behulp van het gebruik van await kun je bovenstaande code herschrijven: 

Op deze manier zal de code niet blijven hangen op de langdurende functie maar ook nog kunnen reageren op andere input van de gebruiker. De code zal wel wachten met het uitvoeren van nieuwe functies totdat de lange taak af is.

Maar stel nu dat je code meerdere lange taken bevat, zoals onderstaand voorbeeld:

Je wilt hier dat de meerdere asynchrone taken tegelijkertijd worden verwerkt zonder dat de code wacht op een van beide taken. Dit is mogelijk door gebruik te maken van System.Threading.Tasks.Task. Door voor de verschillende functies een Task() aan te maken, zal de code de functie gaan uitvoeren en kun je door middel van await wachten tot de functie klaar is met verwerken en verdergaan met het resultaat van de lange functie. Hier een voorbeeld van hoe dat eruitziet:

Bij het aanmaken van de Task zal de code beginnen met het uitvoeren van de taak. Als de code awai tegenkomt en de functie is nog niet klaar, dan zal de code daar wachten op de functie. Zo wacht je pas op de functie als je de data die de functie teruggeeft ook echt nodig hebt.

Zie dit artikel voor meer informatie over await.


Andere blogartikelen

  • Interfaces om mee te testen

    Geschreven door: op zondag 24 mei 2020

    Interfaces om te testenIn object geörienteerde programmeertalen kan je gebruikmaken van interfaces. Interfaces zijn een hulpmiddel voor ontwikkelaars. Ze geven de ontwikkelaar aan wat een bepaalde kl ...

    Bekijk het artikel »
  • Het gebruik van de SemaphoreSlim class in C#

    Geschreven door: op zaterdag 28 maart 2020

    Webapplicaties kunnen meerdere calls vanuit meerdere plekken verwerken zonder dat deze requests op elkaar moeten wachten. Maar soms heb je te maken met een usecase waar je helemaal niet wilt dat funct ...

    Bekijk het artikel »
  • SQL en het gebruik van JOIN

    Geschreven door: op zaterdag 28 maart 2020

    Binnen SQL heb je verschillende manieren om tabellen met elkaar te koppelen om zo data uit beide tabellen terug te krijgen in de resultaten. Maar wat houdt elk van deze joins in?Verschillende typenE ...

    Bekijk het artikel »
Bel 072 5345 888
Meer dan 40 bedrijven vertrouwen op ons
Onze Middelen en Technologieën
microsoft silver partner
Adobe partner
fd-gazellen-2018.jpg
Google analytics
partners-logo.jpg
Op de hoogte blijven?

Meld u aan voor de gratis nieuwsbrief om op de hoogte te blijven van onze activiteiten