Witam.
Zostałem zmuszony do skorzystania z EF i zauważyłem, że sporo tutoriali korzysta z ToListAsync()
. Czy przypadkiem to nie jest "dodatkowy krok" dla programu, który wpływa na czas zwracanego wyniku? Jakie korzyści jeszcze korzyści niesie za sobą taka konwersja?
Co jeżeli twoje query potrzebuje np. 15 sekund?
Rozumiem, że jak drugi odpyta ten endpoint to będzie musiał poczekać, aż ten pierwszy odbębni swoje 15 sekund?
A wiesz po co się w ogóle używa asyncowe wersje? Że jak baza będzie mielić te swoje 15 sekund, to ten wątek który ją wolał może być zwrócony do puli i robić coś innego.
Wszystko wskazuje na to, że właśnie nie wiem To jest coś typu, że wszyscy tak robią to ja też. Rozumiem, że takie rozwiązania są potrzebne w API, które daje globalny dostęp jakieś grupie użytkowników, gdzie zapytań w ciągu minuty może być tysiące, np.: Allegro. Czy w API, które jest backendem i nie udostępnia się "na zewnątrz" ma jakieś korzyści z tego, że jest asynchroniczne?
AdamWox napisał(a):
Wszystko wskazuje na to, że właśnie nie wiem To jest coś typu, że wszyscy tak robią to ja też. Rozumiem, że takie rozwiązania są potrzebne w API, które daje globalny dostęp jakieś grupie użytkowników, gdzie zapytań w ciągu minuty może być tysiące, np.: Allegro. Czy w API, które jest backendem i nie udostępnia się "na zewnątrz" ma jakieś korzyści z tego, że jest asynchroniczne?
Taka analogia: Czy pisać ładny kod czy może spaghetti bo tylko ja go będę utrzymywał. Rób async. Nie zaszkodzi a nie wiesz jak w przyszłości się to rozwinie.
AdamWox napisał(a):
Wszystko wskazuje na to, że właśnie nie wiem To jest coś typu, że wszyscy tak robią to ja też. Rozumiem, że takie rozwiązania są potrzebne w API, które daje globalny dostęp jakieś grupie użytkowników, gdzie zapytań w ciągu minuty może być tysiące, np.: Allegro. Czy w API, które jest backendem i nie udostępnia się "na zewnątrz" ma jakieś korzyści z tego, że jest asynchroniczne?
Nie, nie ma żadnych. Sam async/await dodaje dodatkowy narzut czasowy związany np z użyciem maszyny stanów..
Użycie async/await jest wskazane wtedy kiedy wiesz że aplikacja będzie używana przez wielu klientów. Dzięki temu wątek zamiast czekać zblokowany na wynik zapytania przez minutę zostaje zwrócony do puli wątków i może w tym czasie obsłużyć kolejne 150 requestów.
Ale tak jak pisze @szydlak: nie wiesz jak się system rozwinie w przyszłości i lepiej może pisać to myśląc o najgorszym