Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
2050Przerywaniedziałaniawątkówroboczych
51
Wwiększościprzypadkówzarządzanapulawątkówbędziewystarczająca.Jednak
wsytuacji,kiedywydajnośćaplikacjijestkluczowymaspektem,niezarządzanapula
wątkówmożeokazaćsięlepszymrozwiązaniem.Wątkiniezarządzanetworzone
napoziomiesystemuoperacyjnego.Dziękitemuplanistasystemuwydajniejoptyma-
lizujedziałaniewątkówwmaszynachwyposażonychwwielordzenioweprocesory.
Wątkiroboczemożnarównieżtworzyćiuruchamiaćsamodzielnie.Takiedo-
datkowewątkiinicjujesięzapomocąjednegozkonstruktorówklasyTask.Zkolei,
wceluuruchomieniawątkuroboczegowystarczywywołaćmetodęStarttejklasy,
coilustrujeprzykładzlistingu2.10.
Listing2.10.Tworzenieiuruchamianiewątkuroboczego
Tasktask=newTask(()=>PerformCalculations(pointsCount));
task.Start();
Wtympodrozdzialeobliczenialiczby
p
zostałyprzeniesionedofunkcjiwątku
roboczego,copozwoliłozwolnićgłównywątekzczasochłonnychobliczeńoraz
zwiększyłoresponsywnośćaplikacji.Jejaktualnaimplementacjamajednakpoważną
wadę,którapoleganatym,żeużytkownikmożewielokrotnieuruchomićobliczenia,
którebędąkolejkowanewpuliwątkówiuruchamianerównolegle.Wkolejnym
podrozdzialeprojektaplikacjibędzieuzupełnionyododatkoweprocedury,które
pozwoląsięprzedtymzabezpieczyć.
2|5|Przerywaniedziałaniawątkówroboczych
Domyślnymsposobemprzerywaniadziałaniawątkówroboczychwaplikacjachdla
platformyWindowsjestwykorzystanieklasy
CancellationTokenSource
orazstruk-
tury
CancellationToken
.Pierwszaznichudostępniametodę
Cancel
,którasłuży
dowysyłaniainformacjidoobiektówtypu
CancellationToken
okonieczności
przerwaniadanegozadania.Zazwyczajobiektytypu
CancellationToken
prze-
kazywanejakoargumentymetoduruchamianychwramachwątkówroboczych.
Dziękitemukoniecznośćprzerwaniaoperacjimożnasprawdzić,odczytującwartość
zapisanąwpolu
CancellationToken.IsCancellationRequested
.Następnie,na
tejpodstawiepodejmujesięodpowiedniedecyzje.
Wtympodrozdzialemechanizmtenbędziezilustrowanyzapomocąprzykładu,
wktórymprojektMonteCarloPiuzupełnimyomożliwośćprzerywaniaobliczeń.
Implementacjatejfunkcjonalnościpoleganawykonaniunastępującychzmianwko
-
dzieźródłowymaplikacjiMonteCarloPi:
1.PrzejdźdoedycjiplikuMainPage.xamliuzupełnijgoopoleceniawyróżnione
nalistingu2.11.