WORDS
Snyggare syntax med async/await
async och await ger snyggare syntax när man arbetar med Tasks i C#. Låt oss börja med en synkron beräkning. När man anropar den, så kommer den aktuella tråden att blockeras tills beräkningen är klar, vilket kan ta lång tid om det är en långsam beräkning.
public void StartSync()
{
try
{
int result = CalculateSync();
Console.WriteLine($"Resultatet är {result}");
}
catch (Exception e)
{
Console.WriteLine($"Fel: {e}");
}
}
private int CalculateSync()
{
// Långsam beräkning
return 2 + 2;
}
Att göra detta asynkront, så att tråden inte blockeras, kräver bara några nyckelord.
public async void StartAsync()
{
try
{
int result = await CalculateAsync();
Console.WriteLine($"Resultatet är {result}");
}
catch (Exception e)
{
Console.WriteLine($"Fel: {e}");
}
}
private async Task<int> CalculateAsync()
{
// Långsam beräkning
return 2 + 2;
}
Man skulle kunna säga att async bäddar in resultatet, en int, i en Task. await gör motsatsen och hämtar istället upp innehållet i en Task.
Motsvarande kod med ContinueWith kräver att man skriver mer kod.
public void StartAsync2()
{
CalculateAsync()
.ContinueWith(task =>
{
if (task.IsFaulted || task.IsCanceled)
{
Console.WriteLine($"Fel: {task.Exception}");
}
else
{
Console.WriteLine($"Resultatet är {task.Result}");
}
});
}