Asynchroniczność endpointow w .Net 5 WebAPI

0

Cześć, być może to pytanie jest dziwne, ale czy wszystkie wystawione endpointy działają w web api asynchroniczne?
Do czego zmierzam, widziałem różne przykłady pisania endpointow w kontrolerach na zasadzie:

public async Task<ActionResult<int>> GetNumber(int id)

Jeśli działają asynchronicznie to po co async Task? może kiedyś to inaczej działało? może jest to już zbędne? Tworząc teraz nowy projekt mamy dostępny WeatherForecastController, tam jest zwracane zwykłe IEnumrable, bez async Task bez ActionResult, IActionResult - do czego to w ogóle służy (ActionResult)? Służyło? Dlaczego wyniki żądania są zwracane jako ActionResult<class> a nie bezpośrednio? Czy może to już też jest nie potrzebne?

1

Jeżeli okręslisz że metoda zwraca IActionResult, to możesz sobie zwrócić
BadRequest(), NoContent(), Ok(object)
w przypadku IEnumerable zwracasz po prostu kolekcje obiektów - ma to zastosowanie np. w mvc, gdzie dzięki temu możesz sobie łatwo zbindować te dane do formularza np.

0

Ok rozumiem, ja na chwile obecną próbuję stworzyć samo API, więc ActionResult mi się przyda. Pytanie czy lepiej używać IActionResult wtedy wymagane jest rzutowanie na ten interfejs przy return, czy lepiej ActionResult<klasa> ta konstrukcja wydaje się być czytelniejsza.
A co z używaniem async? chyba że jeśli dobrze rozumiem, bez tego nie będę w stanie w środku wywołać await? np. zapisując coś asynchronicznie do DB za pomocą EF, a chyba jednak dobrze by było z tego korzystać niż wykonywać operacje na DB synchronicznie?

6

Zwracasz ActionResult po to żeby mieć większą kontrolę nad tym jaki kod jest zwracany z API.

Co do asynchroniczności, to chodzi o że jeśli w kodzie będziesz np. wyciągał coś z bazy albo uderzał do innego API i nie zrobisz tego asynchronicznie (tzn. Twój action method nie będzie async i nie zrobisz await na dłuższym procesie), to na czas oczekiwania kontrola przepływu nie zostanie zwrócona do serwera (IIS, Kestrel itp.) przez co nie będzie on mógł wykorzystać tych zasobów które chwilowo mogą być zwolnione.

Jeśli w ramach obsługi requesta nie robisz nic wymagającego, to nie musisz używać async i zwracać Taska z action method.

0

Dzięki za zrozumiałą wypowiedź! o to mi chodziło. Pozdrawiam.

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