Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
2050Przerywaniedziałaniawątkówroboczych
{
55
conststringprefx="Liczbapunktów:{0:d},Wynik:{1:f4}"
+",Błąd:{2:f6},Czaswykonania(ms):{3:d}";
result=string.Format(prefx,
pointsCount,estimatedValue,
MonteCarlo.EstimationError(estimatedValue),
stopwatch.ElapsedMilliseconds);
}
else
{
result="Obliczeniazostałyprzerwane";
}
returnresult;
}
Listing2.16.Stankontrolekwizualnychjestaktualizowanyprzedrozpoczęciemipozakoń-
czeniuwykonywaniaobliczeń
privateasyncvoidPerformCalculationsAsync(longpointsCount)
{
PrepareCancellationTokenSource();
SetCalculationState(true);
awaitTask.Run(()=>PerformCalculations(pointsCount));
SetCalculationState(false);
}
Listing2.17.PrzekazanieobiektutypuCancellationTokenSourcedostatycznejmetody
EstimatePiklasyMonteCarlo
privateasyncvoidPerformCalculations(longpointsCount)
{
stopwatch.Restart();
doubleestimatedValue=MonteCarlo.EstimatePi(
pointsCount,cancellationTokenSource.Token);
stopwatch.Stop();
stringresult=PrepareResult(pointsCount,estimatedValue);
awaitDisplayResultSynchronizationContext(result);
}
Zaimplementowaniepowyższejfunkcjonalnościpozwalateraznaprzerywanie
obliczeńrealizowanychwosobnymwątkuroboczym.Ponadto,zapobiegawielokrot-
nemuuruchamianiufunkcjiwątkuroboczego,ponieważprzyciskzetykietąOblicz