async, await, Task<ActionResult>

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

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1