Sobes.tech
Junior

Wat is asynchrone programmeren met behulp van de sleutelwoorden async en await?

sobes.tech AI

Antwoord van AI

Asynchrone programmering met async en await maakt het mogelijk om operaties uit te voeren die lang kunnen duren (bijvoorbeeld invoer/uitvoer, netwerkverzoeken) zonder de hoofduitvoeringsdraad van het programma te blokkeren. Dit verbetert de responsiviteit van de applicatie.

  • async: Wordt gebruikt om een methode te modificeren en geeft de compiler aan dat er binnenin await-operatoren gebruikt zullen worden. Een met async gemarkeerde methode kan Task, Task<T> of void retourneren (hoewel void vermeden moet worden, behalve voor event handlers). De geretourneerde Task of Task<T> vertegenwoordigt een operatie die nog niet voltooid is.
  • await: Wordt toegepast op een asynchrone operatie (die Task of Task<T> retourneert). Wanneer de uitvoering de await-operator bereikt, wordt de methode "onderbroken" en wordt de huidige draad vrijgegeven. De asynchrone operatie wordt op de achtergrond uitgevoerd (of gebruikt een thread pool, of het I/O-mechanisme van het besturingssysteem). Wanneer de operatie voltooid is, wordt de uitvoering van de methode hervat na dezelfde await op een andere of dezelfde draad, indien beschikbaar.

Voorbeeld van basisgebruik:

// async methode die Task retourneert
public async Task DoSomethingAsync()
{
    // Voert een asynchrone operatie uit en wacht op voltooiing
    await Task.Delay(1000); // Simulatie van een langdurige operatie
    Console.WriteLine("Asynchrone operatie voltooid.");
}

// async methode die Task<int> retourneert
public async Task<int> GetValueAsync()
{
    await Task.Delay(500);
    return 42;
}

// Gebruik van async en await in de Main-methode (voorbeeld, in echte toepassingen wordt meestal gestart vanuit een async Main in .NET Core 3.0+)
public static async Task Main(string[] args)
{
    Console.WriteLine("Start...");
    
    // Roep asynchrone methoden aan
    await DoSomethingAsync();
    int result = await GetValueAsync();
    
    Console.WriteLine($"Resultaat: {result}");
    Console.WriteLine("Einde.");
}

Het belangrijkste voordeel van async/await ten opzichte van handmatige thread- of callback-afhandeling is de vereenvoudiging van het schrijven en lezen van asynchrone code. Het lijkt bijna op synchrone code, maar blokkeert niet de draad, wat cruciaal is voor applicaties met gebruikersinterfaces of servers met hoge belasting.