Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
50
Programowanieasynchroniczne
4.WplikuMainPage.xaml.cswobrębiedeklaracjiklasyMainPagewstawpo-
leceniazlistingu2.8.
Listing2.7.PobieraniereferencjidokontekstusynchronizacjiwątkuUI
publicMainPage()
{
InitializeComponent();
stopwatch=newStopwatch();
synchronizationContext=SynchronizationContext.Current;
}
Listing2.;.KolejkowaniezadańuruchamianychwramachkontekstusynchronizacjiwątkuUI
privatevoidDisplayResultSynchronizationContext(stringresult)
{
synchronizationContext.Post(
(arg)=>ListBoxResults.Items.Add(arg),result);
}
Abyzweryfkowaćdziałanieprocedurzlistingów2.7oraz2.8,wystarczyzastąpić
wywołaniemetody
DisplayResult
funkcją
DisplayResultSynchronization-
Context.Oczywiściewynikdziałaniaaplikacjinieulegniezmianie.
InterfejsprogramistycznyuniwersalnychaplikacjiWindowsudostępniajeszcze
metodyumożliwiającekolejkowaniezadańwniezarządzanejpuliwątków,utwo-
rzonejprzezsystemoperacyjnyiprzeznaczonejdladanegoprocesu.Uruchomienie
wybranychprocedurwramachjednegozwątkówzpuliniezarządzanejwykonu-
jesięzapomocąstatycznejmetody
RunAsync
klasy
ThreadPool
zdefniowanej
wprzestrzeninazw
Windows.System.Threading
.
Przykładjejwykorzystaniado
uruchomieniaalgorytmuwyznaczającegowartośćliczby
p
przedstawialisting2.9.
Listing2.9.Przykładwykorzystanianiezarządzanejpuliwątków
privateasyncvoidPerformCalculationsAsync(longpointsCount)
{
WorkItemHandlerworkItemHandler=newWorkItemHandler(
(arg)=>PerformCalculations(pointsCount));
awaitThreadPool.RunAsync(workItemHandler,WorkItemPriority.High);
}
Proceduryzlistingu2.9pokazują,żekolejkowaniezadańwniezarządzanejpuli
wątkówrealizujesięanalogiczniejakwprzypadkupulizarządzanej.Mianowicie,
zwykorzystaniemmetody
ThreadPool.RunAsync
,która,wprzeciwieństwiedo
metodyTask.Run,umożliwiadodatkowozdefniowaniepriorytetu,zjakimbędą
wykonywanewskazanepolecenia.