async, await, Task<ActionResult>

async, await, Task<ActionResult>
DrPeter
  • Rejestracja: dni
  • Ostatnio: dni
1

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 :)

JU
  • 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ś:

Kopiuj
public void Foo()
{
}

A przy metodzie asynchronicznej masz:

Kopiuj
public async Task Foo() {}

Jeśli metoda zwraca jakąś wartość, to wtedy:
Synchroniczna:

Kopiuj
public int Foo() {}

Asynchroniczna:

Kopiuj
public async Task<int> Foo() {}

Stąd masz też takie właśnie sygnatury:

Kopiuj
public async Task<ActionResult> DoSomething() {}

Wtedy metoda w kontrolerze zostanie wykonana asynchronicznie i zwróci odpowiedni rezultat HTTP.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.