Przeglądając różne repozytoria na Githubie, nie raz natknąłem się na akcje kontrolera oznaczone Task<ActionResult> ActionName()
, czy metody serwisów oznaczonych async Task MethodName()
i to w nawet prostych projektach. Jak i kiedy świadomie z nich korzystać, zastępując nimi standardowe ActionResult
czy zwykłego void
? Podkreślę, że to pytanie w kontekście ASP.NET MVC. Z góry dzięki za odpowiedzi :)
1
0
Dzięki ActionResult możesz zwrócić rezultat z kontrolera, np: Ok, BadRequest itd. Po prostu to pomaga Ci zwrócić standardowe odpowiedzi HTTP z dodatkowymi danymi. I to jest super, bo od razu wiadomo, jaki jest rezultat wywołania (zapisany w nagłówki odpowiedzi HTTP).
Następnie mamy Task. Taska używasz do rezultatu funkcji asynchronicznej. Czyli przy zwykłej metodzie synchronicznej miałbyś:
public void Foo()
{
}
A przy metodzie asynchronicznej masz:
public async Task Foo() {}
Jeśli metoda zwraca jakąś wartość, to wtedy:
Synchroniczna:
public int Foo() {}
Asynchroniczna:
public async Task<int> Foo() {}
Stąd masz też takie właśnie sygnatury:
public async Task<ActionResult> DoSomething() {}
Wtedy metoda w kontrolerze zostanie wykonana asynchronicznie i zwróci odpowiedni rezultat HTTP.