Software Developer's Journal 2014 03.pdf

(5286 KB) Pobierz
1352954368.039.png
4
Programowanie asynchroniczne
nowość języka C# 5.0
Jacek Matulewski
Programowanie asynchroniczne to niezwykle istotny element
aplikacji Windows Store uruchamianych na nowym ekranie Start
REKLAMA
Jeżeli jesteś zainteresowany/a
reklamą swoich produktów w naszym
magazynie
10
Co nadchodzi w C# 6.0
Tomasz Pęczek
C# jest najpopularniejszym językiem na platformie
.Net, a także jednym z bardziej popularnych w ogóle (#5 w
indeksie PYPL, #6 w indeksie TIOBE). Warto przyjrzeć się jakie
zmiany czekają nas w jego następnej wersji.
Jeżeli jesteś zainteresowany/a
wypromowaniem swojej marki wśród
specjalistów IT
14
IL Weaving w służbie programiście
Marcin Biegała
Praca programisty to nie tylko ciekawe problemy,
linii kodu, które tworzymy każdego dnia, a które nierzadko nie
stanowią funkcjonalności, a są częścią nudnego i powtarzalnego
kodu infrastruktury naszych systemów i aplikacji.
Jeżeli szukasz klientów lub
pracowników
Zareklamuj się u nas!
22
APLIKACJE W SHAREPOINT 2013
KONFIGURACJA USŁUGI „APPS FOR
SHAREPOINT”
Jacek Zięba
aplikacjami wraz z dostępem do Sklepu SharePoint. Całość można
konfigurować w Centralnej Administracji w wydzielonym module:
„Apps”. Zanim jednak przejdziemy do tego etapu warto dokładnie
przyjrzeć się tematowi.
Posiadamy bazę 90 tysięcy
specjalistów z różnych
działów IT!
W celu uzyskania oferty
reklamowej skontaktuj się z
nami: sdjpl@sdjournal.pl
tel. 799 46 34 76
26
PM w RWD – Czyli na co zwrócić
uwagę prowadząc projekt RWD?
Przemysław Wójcik
RWD otacza nas z każdej strony, kolejne serwisy, duże portale
to pytanie każdy musi odpowiedzieć sobie sam, a w tym artykule
powiemy jak wygląda realizacja takiego przedsięwzięcia z punktu
widzenia kierownika projektu.
30
Zmiana warty, czyli jak nowoczesne
technologie informacyjne
odmieniają nasze życie?
Mateusz Jabłoński
Zmian w codziennym życiu, jakie przyniósł ze sobą rozwój
wszędzie.
www.sdjournal.pl
Software Developer’s Journal
jest wydawany przez
NPRACA Sp. z o.o.
Redakcja: sdjpl@sdjournal.pl
Kierownik produkcji: Andrzej Kuca
Redakcja dokłada wszelkich starań, by publikowane w piśmie informacje i
programy były poprawne, jednakże nie bierze odpowiedzialności za efekty
wykorzystania ich; nie gwarantuje także poprawnego działania programów
shareware, freeware i public domain.
Wszystkie znaki firmowe zawarte w piśmie są własności odpowiednich firm.
Zostały użyte wyłącznie w celach informacyjnych.
Osoby zainteresowane wspópracą prosimy o kontakt:
sdjpl@sdjournal.pl
Adres korespondencyjny:
NPRACA Spółka z o.o.
ul. 3 Maja 46, 72-200 Nowogard, Polska
Oddział w Warszawie:
ul. Postępu 17 D, 02-676 Warszawa, Polska
www.sdjournal.pl
Skład i łamanie / projekt okładki:
Digital Concept
www.digitalconcept.pl
admin@digitalconcept.pl
Facebook: https://www.facebook.com/SoftwareDevelopersJournal
1352954368.041.png 1352954368.042.png 1352954368.001.png 1352954368.002.png 1352954368.003.png 1352954368.004.png 1352954368.005.png 1352954368.006.png 1352954368.007.png 1352954368.008.png 1352954368.009.png 1352954368.010.png 1352954368.011.png 1352954368.012.png 1352954368.013.png 1352954368.014.png 1352954368.015.png 1352954368.016.png 1352954368.017.png 1352954368.018.png 1352954368.019.png 1352954368.020.png 1352954368.021.png
Programowanie asynchroniczne
nowość języka C# 5.0
Programowanie asynchroniczne to niezwykle istotny element aplikacji
Windows Store uruchamianych na nowym ekranie Start Windows
8, gdzie korzystamy z gotowych funkcji asynchronicznych. Możemy
go jednak użyć we własnych projektach dowolnego typu, w których
takie funkcje przygotowujemy – to oznacza przygotowywanie funkcji
tworzących i zwracających referencję do zadań. W poniższym artykule
przedstawię ten mechanizm w sposób, w jaki jego poznanie jest
potrzebne, do samodzielnego pisania tego typu metod. A zilustruję to
prostymi aplikacjami konsolowymi.
DOWIESZ SIĘ
Z artykułu dowiesz się w jaki sposób przygotowywać i używać ope-
racje asynchroniczne w C# 5.0.
POWINIENEŚ WIEDZIEĆ
Wskazana jest znajomość języka C# i platformy .NET w stopniu
przynajmniej podstawowym.
J ęzyk C# 5.0 wyposażony został w nowy operator
nie. Czynność ta wprowadza półsekundowe opóźnienie
metodą Thread.Sleep , które oczywiście opóźnia jej za-
kończenie i wydrukowanie informującego o tym komu-
nikatu.
W listingu 2 ta sama akcja wykonywana jest asyn-
chronicznie w osobnym wątku utworzonym na po-
trzeby zdefiniowanego przez nas zadania. Synchro-
nizacja następuje w momencie odczytania wartości
zwracanej przez czynność, tj. w momencie odczytania
właściwości Result . Jej sekcja get czeka ze zwróce-
niem wartości aż do zakończenia zadania i tym samym
await, ułatwiający synchronizację dodatkowych uru-
chomionych przez użytkownika zadań. Poniżej zapre-
zentuję prosty przykład jego użycia, który chyba najlepiej
wyjaśni jego działanie. Nie będę szczegółowo omawiał
zadań, mam na myśli bibliotekę TPL i jej sztandarową
klasę Task, jednak dogłębna znajomość tej biblioteki nie
jest konieczna. Spójrzmy na przykład widoczny na listin-
gu 1. Przedstawia on metodę Main aplikacji konsolowej,
która definiuje przykładową czynność, zapisuje referen-
cję do niej w zmiennej akcja i wykonuje ją synchronicz-
Listing 1. Synchroniczne wykonywanie kodu zawartego w akcji
static void Main ( string [] args )
{
// czynność
Func < object , long > akcja =
( object argument ) =>
{
Console . WriteLine ( "Początek działania akcji - " + argument . ToString ());
System . Threading . Thread . Sleep ( 500 ); // opóźnienie 0.5s
Console . WriteLine ( "Koniec działania akcji - " + argument . ToString ());
return DateTime . Now . Ticks ;
};
long wynik = akcja ( "synchronicznie" );
Console . WriteLine ( "Synchronicznie: " + wynik . ToString ());
}
4
3/2014
1352954368.022.png 1352954368.023.png 1352954368.024.png 1352954368.025.png 1352954368.026.png 1352954368.027.png 1352954368.028.png 1352954368.029.png
Wprowadzenie do programowania asynchronicznego w .NET
Więcej w...
Artkuł jest fragmentem rozdziału z przygotowywanej książki pt. „Visual Studio 2013. Podręcznik programo-
wania w C# (z zadaniami)”, który ukaże się czerwcu 2014 nakładem Wydawnictwa Helion. [LINK: http://he-
lion.pl/ksiazki/visual-studio-2013-podrecznik-programowania-w-c-z-zadaniami-jacek-matulewski-michal-
gajewski,vs12pa.htm]
Informacje na temat programowania równoległego (wiele technologii) i asynchronicznego można również
znalaeźć w książce Programowanie równoległe i asynchroniczne w C# 5.0 (Helion, 2013). [LINK: http://he-
lion.pl/ksiazki/programowanie-rownolegle-i-asynchroniczne-w-c-5-0-jacek-matulewski-mateusz-warczak-piotr-
peplowski,proch5.htm]
Wraz z wersjami 4.0 i 4.5 w platformie .NET
(oraz w platformie Windows Runtim e) pojawiło się
wiele metod, które wykonują długotrwałe czyn-
ności asynchronicznie. Znajdziemy je w klasie
HttpClient , w klasach odpowiedzialnych za obsłu-
gę plików ( StorageFile , StreamWriter , StreamReader ,
XmlReader ), w klasach odpowiedzialnych za kodowa-
nie i dekodowanie obrazów czy też w klasach WCF .
Asynchroniczność jest wręcz standardem w aplika-
cjach Windows 8 z interfejsem Modern UI (aplikacje
Windows Store ). I właśnie aby ich użycie było (pra-
wie) tak proste jak metod synchronicznych, wpro-
wadzony został w C# 5.0 (co odpowiada platformie
.NET 4.5) operator await. Ułatwia on synchroniza-
cję dodatkowego zadania tworzonego przez te me-
wstrzymuje wątek, w którym wykonywana jest meto-
da Main . Jest to zatem punkt synchronizacji. Zwróć-
my uwagę, że po instrukcji zadanie. Start , a przed od-
czytaniem właściwości Result mogą być wykonywane
dowolne czynności, o ile są niezależne od wartości
zwróconej przez zadanie.
Ponadto nie jest konieczne, aby instrukcja odczytania
właściwości Result znajdowała się w tej samej metodzie
co uruchomienie zadania — należy tylko do miejsca jej
odczytania przekazać referencję do zadania (w naszym
przypadku zmienną typu Task<long> ). Zwykle referen-
cję tę przekazuje się jako wartość zwracaną przez meto-
dę uruchamiającą zadanie. Zgodne z konwencją metody
tworzące i uruchamiające zadania powinny zawierać w
nazwie przyrostek ..Async (listing 3).
Listing 2. Użycie zadania do asynchronicznego wykonania kodu
static void Main ( string [] args )
{
// czynność
Func < object , long > akcja =
( object argument ) =>
{
Console . WriteLine ( " Początek działania akcji - " + argument . ToString ());
System . Threading . Thread . Sleep ( 500 ); // opóźnienie 0.5s
Console . WriteLine ( " Koniec działania akcji - " + argument . ToString ());
return DateTime . Now . Ticks ;
};
long wynik = akcja ( " synchronicznie " );
Console . WriteLine ( " Synchronicznie: " + wynik . ToString ());
// w osobnym zadaniu
Task < long > zadanie = new Task < long >( akcja , " zadanie " );
zadanie . Start ();
Console . WriteLine ( " Akcja została uruchomiona " );
// właściwość Result czeka ze zwróceniem wartości, aż zadanie zostanie zakończone
// (synchronizacja)
long wynik = zadanie . Result ;
Console . WriteLine ( " Zadanie: " + wynik . ToString ());
}
5
www.sdjournal.pl
 
1352954368.030.png 1352954368.031.png 1352954368.032.png 1352954368.033.png 1352954368.034.png 1352954368.035.png 1352954368.036.png 1352954368.037.png 1352954368.038.png
Zgłoś jeśli naruszono regulamin