Exemple #1
0
        public async Task CalcPiAsyncTPL()
        {
            Stopwatch timer = new Stopwatch();

            timer.Start();

            int numberOfTask = (int)_task.Value;

            Task[] taskArray = new Task[numberOfTask];

            int digits = (int)this._digits.Value;

            int digitsPerTask = (digits / numberOfTask);

            string _piString = "3.";

            if (digits > 0)
            {
                for (int j = 0; j < taskArray.Length; j++)
                {
                    taskArray[j] = Task.Factory.StartNew(
                        (Object obj) =>
                    {
                        CustomData data  = obj as CustomData;
                        int digits1      = digitsPerTask * (data.Name + 1);
                        string piString1 = "";
                        for (int i = data.Name * digitsPerTask; i < (data.Name + 1) * digitsPerTask; i += 9)
                        {
                            int nineDigits = NineDigitsofPi.StartingAt(i + 1);
                            int digitCount = Math.Min(digits1 - i, 9);
                            string ds      = string.Format("{0:D9}", nineDigits);
                            piString1     += ds.Substring(0, digitCount);
                        }
                        data.piString = piString1;
                    },
                        new CustomData()
                    {
                        Name = j
                    });
                }


                await Task.WhenAll(taskArray);

                foreach (var task in taskArray)
                {
                    var data = task.AsyncState as CustomData;
                    if (data != null)
                    {
                        _piString += data.piString;
                    }
                }

                _performance.Text = timer.Elapsed.TotalSeconds.ToString();
                _pi.Text          = _piString;
            }
        }
Exemple #2
0
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            PiObject piObj = e.Argument as PiObject;

            backgroundWorker1 = sender as BackgroundWorker;
            backgroundWorker1.WorkerSupportsCancellation = true;
            backgroundWorker1.WorkerReportsProgress      = true;

            StringBuilder pi    = new StringBuilder("3", piObj.digits + 2);
            var           watch = System.Diagnostics.Stopwatch.StartNew();

            if (piObj.digits > 0)
            {
                pi.Append(".");

                for (int i = 0; i < piObj.digits; i += 9)
                {
                    if (!this.backgroundWorker1.CancellationPending)
                    {
                        int    nineDigits = NineDigitsofPi.StartingAt(i + 1);
                        int    digitCount = Math.Min(piObj.digits - i, 9);
                        String ds         = String.Format("{0:D9}", nineDigits);
                        pi.Append(ds.Substring(0, digitCount));
                        piObj.calcValue = pi.ToString();
                    }
                    else
                    {
                        e.Cancel = true;
                    }
                }// the code that you want to measure comes here
                watch.Stop();
            }
            var elapsedMs = watch.ElapsedMilliseconds;

            piObj.elapsedMs = elapsedMs.ToString() + " ms";
        }
Exemple #3
0
        public async Task CalcPiAsync()
        {
            Stopwatch timer = new Stopwatch();

            timer.Start();

            Task <string> t = new Task <string>
                              (
                () =>
            {
                int digits       = (int)this._digits.Value;
                StringBuilder pi = new StringBuilder("3", digits + 2);
                if (digits > 0)
                {
                    pi.Append(".");
                    for (int i = 0; i < digits; i += 9)
                    {
                        int nineDigits = NineDigitsofPi.StartingAt(i + 1);
                        int digitCount = Math.Min(digits - i, 9);
                        string ds      = string.Format("{0:D9}", nineDigits);
                        pi.Append(ds.Substring(0, digitCount));
                    }
                }
                return(pi.ToString());
            }
                              );

            //t.Start();
            await t;

            string result = await t;

            timer.Stop();
            _pi.Text          = result;
            _performance.Text = timer.Elapsed.TotalSeconds.ToString();
        }