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 :)
async, await, Task<ActionResult>
- Rejestracja: dni
- Ostatnio: dni
1
- Rejestracja: dni
- Ostatnio: dni
- Postów: 5046
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.