WORDS
Task: Result
Om en metod returnerar en Task
så är det ofta en bra idé att fortsätta använda Task
s 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.