WORDS
Task: Result
Om en metod returnerar en Task så är det ofta en bra idé att fortsätta använda Tasks och async/await i sin egen kod. Det gör det mer uppenbart för dom som använder ens metod att operationen kan ta lång tid. Ibland måste man emellertid implementera ett synkront interface, och alltså blockera aktuell tråd till dess att en Task har avslutats. För detta syfte kan man använda Task.Result, som väntar synkront.
public void RunSync()
{
try
{
Task<int> task = CalculateDelay();
// Vänta synkront (blockera tråden i 5 sek)
int result = task.Result;
Console.WriteLine($"Resultatet är {result}");
}
catch (Exception e)
{
Console.WriteLine($"Fel: {e}");
}
}
private async Task<int> CalculateDelay()
{
// Vänta i 5 sek
await Task.Delay(5000);
return 2 + 2;
}
Task.Result bör användas sparsamt, men det kan vara motiverat ibland.