WORDS
Snyggare syntax med async
/await
async
och await
ger snyggare syntax när man arbetar med Task
s 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}");
}
});
}