Asynchroniczne akcje w kontrolerach MVC/API

0

Witam,

Czy warto zawsze deklarować akcje jako asynchroniczne (async)? Chodzi mi o sytuacje gdy akcja wykonuje coś więcej niż tylko zwraca widok- np. wywołuje asynchroniczny serwis który z kolei wysyła zapytanie do bazy danych. W różnych artykułach można znaleźć informacje że czasem koszt asynchroniczności może być większy od samej operacji wykonywanej synchronicznie jednak ciężko znaleźć jakieś konkrety. Dla przykładu rozważmy poniższe dwie opcje:

        // Opcja 1
        public IActionResult Index()
        {
            var model = _mediator.Send(new GetPersonsViewModels()).Result;
            return View(model);
        }

        // Opcja 2
        public Task<IActionResult> Index()
        {
            var model = await _mediator.Send(new GetPersonsViewModels());
            return View(model);
        }

_mediator.Send jest metodą asynchroniczną i wywołuje handler'a na rzecz przekazanego request'a, w tym przypadku GetPersonsViewModels. Handler z kolei wysyła zapytanie do bazy danych i mapuje zwrócone encje na view models. Zapytanie jest proste, nie filtruje po żadnych skomplikowanych warunkach. Stąd też moje pytanie- czy w takim przypadku jest sens aby Index był metodą asynchroniczną (Opcja 2) czy po prostu wywołać Send i poczekać na wynik (Opcja 2)? Skąd wiedzieć czy użycie async w jakimś przypadku jest wskazane czy jest przerostem formy nad treścią?

Więcej informacji o użytym w przykładzie _mediator.Send

1

Jak zawsze podstawą w stwierdzeniu co jest lepsze jest zmierzenie czasu/zużycia zasobów dwóch konkurencyjnych wersji.

I o ile w starym net frameworku rzeczywiście możemy się zastanawiać czy koszt związany z async/await nam sie opłaci, o tyle w net core bardzo do serca sobie wzięli scenariusz w którym asynchroniczne żądanie jest na tyle szybkie że w pełni wykonuje się synchronicznie, zarówno pod względem czasowym jak i presji na GC. Także w net core już nie trzeba sie przejmować narzutem powodowanym przez async./await :)

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