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; } }
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"; }
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(); }