Generalized async return types — it is a new C#7 feature that allows using not only Task as a return type of async methods but also other types (classes or structures) that satisfy some specific requirements. At the same time, async/await is a way to call a set of "continuation" functions inside some context which is an essence of another design pattern — Monad. So,...
Sztuka programowania 1972 dni, 7 godzin, 47 minut temu 182 źrodło rozwiń
Cześć, pod ostatnim postem, użytkownik DD zwrócił mi uwagę by zamiast w każdej iteracji pętli, wykonywać await na handlerze, można je wszystkie odpalić za pomocą metody Task.WhenAll(). W tym wpisie chciałbym omówić różnicę między tymi dwoma podejściami, opisać za i przeciw a także samemu sprawdzić, w praktyce co okazuję się szybsze i mniej zawodne.Różnice Metoda Task.WhenAll() przyjmuje jako...
Sztuka programowania 2238 dni, 6 godzin, 17 minut temu 233 źrodło rozwiń
Saga ma wiele nazw. Znana jest również jako process manager lub orkiestracja. O ile samodzielne wywołania serwisów nie są problemem, o tyle poprawne i sprawne zaimplementowanie operacji Delay, tak aby przetrwała restarty procesu i poprawnie obsłużyła upływający czas nie jest takie proste. Zachęcam do lektury i spojrzenia na opóźnienia pod nieco innym kątem.
Architektura 2745 dni, 17 godzin, 47 minut temu 52 źrodło rozwiń
The syntactic sugar is a helpful feature of C# language. We can use using(var tmp = new ...()) {} instead of Dispose(), we have common foreach instead of while loop with iterating enumerator, and we have await and async. But think a while… do we really need await word?
Daj się poznać 2017 2831 dni, 19 godzin, 58 minut temu 123 źrodło rozwiń
This post from Report from the battlefield series will be about my own mistake. It is related to async/await and MARS i.e. Multiple Active Result Sets. async/await allows us to use asynchronous programming more easily. MARS is a feature of MSSQL that allows us to have more than one pending request opened per connection at the same time...
Sztuka programowania 2837 dni, 6 godzin, 55 minut temu 46 źrodło rozwiń
Nowadays, asynchronous programming isn’t something unusual. We all know that when it comes to do some I/O operations or HTTP request, we should do it async. Why? There’re several reasons but two most important are:Efficiency. In many cases, the code might work faster. That’s because it’s not forced to wait for the result. Instead, it can work on some other stuff and then come back for the response when it’s ready. Simple is that.Comfort. Async improves the comfort of using our applications. We don’t blo...
Sztuka programowania 2892 dni, 22 godziny, 13 minut temu 334 źrodło rozwiń
Wiele razy pisałem już o słowach async\await i z pewnością ułatwiają one życie. Dla przypomnienia rozważmy kod:private async void DownloadAndSortAsync() { int[] allNumbers = await DownloadNumbersAsync(); int[] sortedNumbers = await SortNumbersAsync(allNumbers); MessageBox.Show(string.Join(“,”,sortedNumbers)); } private Task
Sztuka programowania 3791 dni, 2 godziny, 24 minuty temu 194 źrodło rozwiń
W dzisiejszym wpisie poruszę temat tworzenia kontrolerów asynchronicznych a właściwie asynchronicznych akcji kontrolera. W tworze tym wykorzystuje się programowanie wielowątkowe przy użyciu słów kluczowych „async” oraz „await” wprowadzonych we frameworku .NET 4.5. Może nam się to przydać w sytuacji przetwarzania żądania wykonującego wiele operacji wejścia/wyjścia, silnie obciążającego połączenie sieciowe lub procesor. Opisywanej asynchroniczności nie należy mylić z JavaScript’owymi żądaniami asynchronicz...
W poprzednich wpisach omawialiśmy wewnętrzną implementację async\await. Dziś kolejne przykłady pokazujące, czego należy unikać aby optymalizować nasz kod. Jak wiemy, użycie await generuje masę kodu i niesie ze sobą alokację dodatkowych obiektów – maszyna stanów, wątki, wrappery itp. W zasadzie sama alokacja w .NET nie jest jakiś wielkim problemem i jest znacząco szybsza niż w językach niezarządzanych. Niestety, pomimo wielu optymalizacji dokonywanych przez GC, późniejsze ich zwolnienie jest czasochłonn...
Sztuka programowania 4147 dni, 9 godzin, 1 minutę temu 117 źrodło rozwiń
Zanim przejdziemy do pokazania przykładów jak optymalizować async\await najpierw trzeba zrozumieć implementację wewnętrzną w .NET. Bez tego ciężko będzie cokolwiek optymalizować. Na początku async\await wydawał mi się również czymś niezwykłym, a jak zacząłem zagłębiać się w kod IL, okazało się, że to bardzo prosty mechanizm i mógłby być napisany przez każdego z nas. Kod korzystający z async\await wygląda na synchroniczny. Pod spodem jednak są zwykłe callback’i – dokładnie tak jakby było to napisane w po...
Sztuka programowania 4153 dni, 1 godzinę, 37 minut temu 163 źrodło rozwiń
W kolejnych kilku wpisach, zajmiemy się async\await ale od strony wydajnościowej. Jeśli ktoś nie wie do czego te słowa kluczowe służą, zachęcam przeczytać np. mój artykuł o programowaniu asynchronicznym w .NET 4.5. Sposób korzystania z async\await jest bardzo prosty. Do tego stopnia, że programowanie asynchroniczne wygląda w zasadzie tak jak synchroniczne podejście. W kodzie nie ma callback’ow a przepływ logiki wygląda na sekwencyjny. Niestety, trzeba być świadomym jakie pułapki czekają na programistów...
Sztuka programowania 4156 dni, 6 godzin, 4 minuty temu 288 źrodło rozwiń
Łapanie wyjątków w metodzie asynchronicznej nie jest niczym skomplikowanym. Należy tylko pamiętać o tym, iż mamy do czynienia z różnymi możliwymi scenariuszami wyjątków. Metoda oznaczona słowem kluczowym async zawiera przeważnie jedną lub więcej wywołań metod ze słowem kluczowym await. Await stoi przed metodą zwracającą typ Task. Pierwsza zasada to ta, iż await nie może się pojawić się w bloku catch lub finally.
Zaczniemy znów od kawałka kodu. Przeanalizujmy w jaki sposób wykonywana jest powyższa metod...
Nietypowo, na początek trochę kodu. Co czyni powyższą metodę asynchroniczną? Sygnatura metody zawiera słowo kluczowe async, nazwa metody zawiera przyrostek Async, typ zwracany to: Task(TResult), Task lub void, metoda zawiera przynajmniej jedno słowo kluczowe await.
Zamrażanie interfejsu użytkownika podczas wykonywania skomplikowanej czynności nie jest dobrym pomysłem. Aplikacja, która "zamiera" nie zachęca do dalszego wykorzystywania przez użytkownika. Programowanie asynchroniczne z drugiej strony wiąże się z większym nakładem pracy oraz bardziej skomplikowanym kodem wynikowym. Na pomoc przychodzi .NET 4.5 wraz z nowymi słowami kluczowymi: async, await. Jak je stosować i w jaki sposób pomagają nam tworzyć aplikacje asynchroniczne zobaczymy w poniższym przykładzie...
Jestem w miarę świeżo po przeczytanie Programowania Windows 8 (w wersji preview) napisanej przez pana który się nazywa Charles Petzold. Krótka recenzja: Aktualnie książka zawiera siedem rozdziałów, w nich omówienie XAML, mechanizmu wiązań, kontrolek, layout i krótko o WinRT. Jeśli ktoś z was pisał już w WPF czy SL nie znajdzie w niej (przypominam że mówię ciągle o wersji preview) nic ciekawego. Prawie nic, otóż są dwie nowości warte uwagi wprowadzone w nowszej wersji .NET. CallerMemberName oraz async/...
Sztuka programowania 4571 dni, 2 godziny, 34 minuty temu 178 źrodło rozwiń