Exemplo n.º 1
0
 public void WaitUntilComplete()
 {
     this.StartAnalysis();
     this.completedManualResetEvent.WaitOne();
     Analysis.AnalysisState safeValue = this.currentState.SafeValue;
     if (safeValue.IsCanceled)
     {
         throw safeValue.CancellationException;
     }
 }
Exemplo n.º 2
0
 private void CancelAnalysis(Exception exception)
 {
     Analysis.AnalysisState unsafeValue = this.currentState.UnsafeValue;
     if (unsafeValue.IsCanceled)
     {
         return;
     }
     this.currentState.Update(unsafeValue, unsafeValue.SetAsCancled(exception));
     this.completedManualResetEvent.Set();
 }
Exemplo n.º 3
0
        private void CompleteAnalysis()
        {
            Analysis.AnalysisState safeValue  = this.currentState.SafeValue;
            AnalysisProgress       safeValue2 = this.currentProgress.SafeValue;

            if (!safeValue.IsStarted || safeValue2.CompletedConclusions != safeValue2.TotalConclusions)
            {
                return;
            }
            Analysis.AnalysisState updatedValue = safeValue.SetAsCompleted();
            this.currentState.Update(safeValue, updatedValue);
            try
            {
                this.OnAnalysisStop();
            }
            catch (Exception inner)
            {
                this.Cancel(new CriticalException(null, inner));
            }
            this.completedManualResetEvent.Set();
        }
Exemplo n.º 4
0
 public static Analysis.AnalysisState Resolve(Analysis.AnalysisState originalValue, Analysis.AnalysisState currentValue, Analysis.AnalysisState updatedValue)
 {
     return(new Analysis.AnalysisState(updatedValue.analysis, currentValue.hasDiscoveredAnalysisMembers || updatedValue.hasDiscoveredAnalysisMembers, currentValue.isStarted || updatedValue.isStarted, currentValue.isCompleted || updatedValue.isCompleted, currentValue.isCanceled || updatedValue.isCanceled, currentValue.analysisMemberNameMap ?? updatedValue.analysisMemberNameMap, (currentValue.startTime < updatedValue.startTime) ? currentValue.startTime : updatedValue.startTime, (currentValue.stopTime < updatedValue.stopTime) ? currentValue.stopTime : updatedValue.stopTime, currentValue.cancellationException ?? updatedValue.cancellationException));
 }
Exemplo n.º 5
0
        public void StartAnalysis()
        {
            Analysis.AnalysisState unsafeValue = this.currentState.UnsafeValue;
            if (unsafeValue.IsStarted || unsafeValue.IsCanceled)
            {
                return;
            }
            lock (this.startAnalysisLock)
            {
                Analysis.AnalysisState safeValue = this.currentState.SafeValue;
                if (safeValue.IsStarted || unsafeValue.IsCanceled)
                {
                    return;
                }
                Analysis.AnalysisState updatedValue = safeValue.SetAsStarted();
                this.currentState.Update(safeValue, updatedValue);
            }
            AnalysisProgress progress = this.currentProgress.Update(this.currentProgress.UnsafeValue, new AnalysisProgress((from x in this.AnalysisMembers
                                                                                                                            where !(x is RootAnalysisMember)
                                                                                                                            select x).Count((AnalysisMember x) => x.IsConclusion), 0));

            try
            {
                this.OnAnalysisStart();
            }
            catch (Exception inner)
            {
                this.Cancel(new CriticalException(null, inner));
            }
            EventHandler <ProgressUpdateEventArgs> progressUpdated = this.ProgressUpdated;

            if (progressUpdated != null)
            {
                progressUpdated(this, new ProgressUpdateEventArgs(progress));
            }
            List <AnalysisMember> source = (from x in this.AnalysisMembers
                                            where x.IsConclusion
                                            select x).ToList <AnalysisMember>();

            if (source.Any <AnalysisMember>())
            {
                if (this.threadMode == AnalysisThreading.Single)
                {
                    using (IEnumerator <AnalysisMember> enumerator = (from x in source
                                                                      orderby(int) x.EvaluationMode
                                                                      select x).GetEnumerator())
                    {
                        while (enumerator.MoveNext())
                        {
                            AnalysisMember analysisMember = enumerator.Current;
                            analysisMember.Start();
                        }
                        return;
                    }
                }
                using (IEnumerator <AnalysisMember> enumerator2 = (from x in this.AnalysisMembers
                                                                   where x.EvaluationMode == Evaluate.OnAnalysisStart && this.immediateEvaluationFilter(x)
                                                                   select x).GetEnumerator())
                {
                    while (enumerator2.MoveNext())
                    {
                        AnalysisMember member = enumerator2.Current;
                        Task.Factory.StartNew(delegate()
                        {
                            member.Start();
                        }, TaskCreationOptions.LongRunning);
                    }
                }
                Parallel.ForEach <AnalysisMember>((from x in this.AnalysisMembers
                                                   where x.IsConclusion && (x.EvaluationMode != Evaluate.OnAnalysisStart || !this.immediateEvaluationFilter(x))
                                                   select x).ToList <AnalysisMember>(), delegate(AnalysisMember x)
                {
                    x.Start();
                });
                return;
            }
            this.CompleteAnalysis();
        }