private void ReportProgress(bool minimizeFrequentUpdates) { lock (this._progressLock) { DateTime utcNow = DateTime.UtcNow; if (!minimizeFrequentUpdates || (((utcNow - this._progressStartTime) >= TimeSpan.FromSeconds(1.0)) && (this._progressReportLastTime.Equals(DateTime.MinValue) || ((utcNow - this._progressReportLastTime) >= TimeSpan.FromMilliseconds(200.0))))) { double countOfFinishedChildJobs; double num2; int num3; this._progressReportLastTime = utcNow; lock (this._lockObject) { num2 = this._countOfAllChildJobs; countOfFinishedChildJobs = this.CountOfFinishedChildJobs; } if (num2 >= 1.0) { num3 = (int)((100.0 * countOfFinishedChildJobs) / num2); } else { num3 = -1; } num3 = Math.Max(-1, Math.Min(100, num3)); ProgressRecord progressRecord = new ProgressRecord(this._progressActivityId, base.Command, this.StatusMessage); if (this.IsThrottlingJobCompleted) { if (this._progressReportLastTime.Equals(DateTime.MinValue)) { goto Label_0192; } progressRecord.RecordType = ProgressRecordType.Completed; progressRecord.PercentComplete = 100; progressRecord.SecondsRemaining = 0; } else { progressRecord.RecordType = ProgressRecordType.Processing; progressRecord.PercentComplete = num3; int?secondsRemaining = null; if (num3 >= 0) { secondsRemaining = ProgressRecord.GetSecondsRemaining(this._progressStartTime, ((double)num3) / 100.0); } if (secondsRemaining.HasValue) { progressRecord.SecondsRemaining = secondsRemaining.Value; } } this.WriteProgress(progressRecord); } Label_0192 :; } }
private void ReportProgress(bool minimizeFrequentUpdates) { lock (_progressLock) { DateTime now = DateTime.UtcNow; if (minimizeFrequentUpdates) { if ((now - _progressStartTime) < TimeSpan.FromSeconds(1)) { return; } if ((!_progressReportLastTime.Equals(DateTime.MinValue)) && (now - _progressReportLastTime < TimeSpan.FromMilliseconds(200))) { return; } } _progressReportLastTime = now; double workCompleted; double totalWork; int percentComplete; lock (_lockObject) { totalWork = _countOfAllChildJobs; workCompleted = this.CountOfFinishedChildJobs; } if (totalWork >= 1.0) { percentComplete = (int)(100.0 * workCompleted / totalWork); } else { percentComplete = -1; } percentComplete = Math.Max(-1, Math.Min(100, percentComplete)); var progressRecord = new ProgressRecord( activityId: _progressActivityId, activity: this.Command, statusDescription: this.StatusMessage); if (this.IsThrottlingJobCompleted) { if (_progressReportLastTime.Equals(DateTime.MinValue)) { return; } progressRecord.RecordType = ProgressRecordType.Completed; progressRecord.PercentComplete = 100; progressRecord.SecondsRemaining = 0; } else { progressRecord.RecordType = ProgressRecordType.Processing; progressRecord.PercentComplete = percentComplete; int?secondsRemaining = null; if (percentComplete >= 0) { secondsRemaining = ProgressRecord.GetSecondsRemaining(_progressStartTime, (double)percentComplete / 100.0); } if (secondsRemaining.HasValue) { progressRecord.SecondsRemaining = secondsRemaining.Value; } } this.WriteProgress(progressRecord); } }