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 binneninawait-operatoren gebruikt zullen worden. Een metasyncgemarkeerde methode kanTask,Task<T>ofvoidretourneren (hoewelvoidvermeden moet worden, behalve voor event handlers). De geretourneerdeTaskofTask<T>vertegenwoordigt een operatie die nog niet voltooid is.await: Wordt toegepast op een asynchrone operatie (dieTaskofTask<T>retourneert). Wanneer de uitvoering deawait-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 dezelfdeawaitop 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.