Próbowałem przeczytać na temat metod asynchronicznych i teraz próbuję utworzyć własną metodę asynchroniczną. Metoda jest wywołaniem usługi WWW, które zwraca listę dzienników błędów. Nie jestem pewien, czy zrozumiałem poprawnie, więc pomyślałem, że podzielę się moim kodem, aby sprawdzić, czy powinienem zrobić coś innego.Tworzenie metody asynchronicznej usługi sieciowej
Wszystko, co chcę zrobić, to zwrócić listę błędów, wywołując metodę GetAllErrorLogs(), która jest metodą zsynchronizowaną. Ponieważ może zająć sekundę, aby pobrać wszystkie dzienniki błędów, chcę mieć możliwość zrobienia innych rzeczy, gdy zadzwoniłem do metody GetAllErrorLogs(). Oto kod.
[WebMethod]
public async Task<List<ErrorLog>> GetAllErrorLogs()
{
List<ErrorLog> errorLogs = new List<ErrorLog>();
await System.Threading.Tasks.Task.Run(() => {
errorLogs = ErrorLogRepository.GetAllErrorLogs();
});
if (errorLogs == null)
return new List<ErrorLog>();
return errorLogs;
}
Dzięki!
Nie widzę wiele korzyści korzystania asynchronicznie/czekają na stronie serwera. Używasz więcej wątków do tego samego. – I4V
@ I4V: 'async' po stronie serwera może znacznie * zmniejszyć * liczbę wątków używanych na żądanie (zakładając, że kod jest naturalnie asynchroniczny, a nie fałszywy asynchroniczny, taki jak' Task.Run'). W rezultacie serwery asynchroniczne są w stanie skalować znacznie lepiej, często rzędu 10-100x. –
Stephan Cleary ma rację ... Uczestniczyłem w kursie szkoleniowym na terenie kampusu microsoft, gdzie powiedziano nam, że po prostu asynchronizując cały kod uruchomiony na serwerze, uzyskasz ogromny wzrost wydajności tego samego sprzętu. Czysto, ponieważ gdy metoda oczekuje na odpowiedź z połączenia podrzędnego, główny wątek jest uruchamiany, aby przejść do innej pracy ... tj. Radzić sobie z innymi współbieżnymi żądaniami internetowymi. Zaletą jest wielozadaniowość. – GPR