Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
56
Programowanieasynchroniczne
niejestaktywnywtrakciewykonywaniaobliczeń.Dodatkowo,abypoinformować
użytkownikaorealizacjiobliczeńwtle,wyświetlanyjestnieokreślonypasekpo-
stępu(indeterminate).Przykładowewynikidziałaniatakzmodyfkowanejaplikacji
ilustrujerysunek2.2.
Rysunek2.2.Przykładdziałaniaaplikacji.Informacjaorealizacjioperacjiasynchronicznejjest
prezentowanazwykorzystaniempaskapostępu
Kilkaaspektówpowyższegorozwiązaniawymagadłuższegokomentarza.Przede
wszystkimgłównapętlaumieszczonawdefnicjifunkcji
EstimatePi
klasy
MonteCarlo
jestprzerywanapootrzymaniusygnałuzgłaszającegożądanieprzerwaniaoperacji
asynchronicznej.SygnałtenjestdostarczanypowywołaniujednejzmetodCancel
lubCancelAfterklasyCancellationTokenSource,coskutkujezmianąwartości
pola
IsCancellationRequested
klasy
CancellationToken
z
false
na
true
.
Metoda
CancelAfter
pozwaladodatkowozdefniowaćczas,poktórymnastąpi
wysłaniesygnału.
KlasaCancellationTokenSourceumożliwiawyłączniejednokrotnezgłoszenie
sygnału.Ztegopowodukażdorazowowramachmetody
PerformCalculationsAsync
tworzonajestnowainstancjatejklasy,awszelkieniezarządzanezasobyprzydzielonena
potrzebyewentualnejpoprzedniejinstancjizwalniane.SłużydotegometodaDispose.
Wartozwrócićuwagę,żewzasadzieprzerwaniepętliwykorzystywanejdoosza-
cowaniawartościliczby
p
jestrealizowanezapomocąinstrukcjiwarunkowej,któraje-
dyniesprawdzawartośćlogicznąodpowiedniegopolastruktury
CancellationToken
.
Wzwiązkuztymdokontroliwykonywaniafunkcjiwątkówroboczychmożnawy-
korzystaćpolatypu
bool
.Zmianaichwartościpozwalanaprzerwaniedziałania
operacjiasynchronicznej.Jednakżetakiepodejściewymagadodatkowowykorzystania