Пример #1
0
        private IEnumerable <Result <T> > CreateConsumerEnumerable()
        {
            int nextResultIndex            = 0;
            ResultsCache <T> unsafeResults = this.results;

            foreach (Result <T> result in unsafeResults.Skip(nextResultIndex))
            {
                yield return(result);
            }
            nextResultIndex = unsafeResults.Count;
            if (!unsafeResults.IsComplete)
            {
                ResultsCache <T> currentResults;
                do
                {
                    lock (this.producerLock)
                    {
                        if (nextResultIndex == this.results.Count)
                        {
                            if (this.producer == null)
                            {
                                this.producer = this.CreateProducerEnumerator();
                            }
                            try
                            {
                                if (!this.producer.MoveNext())
                                {
                                    yield break;
                                }
                            }
                            catch (Exception inner)
                            {
                                base.CancelAnalysis(new CriticalException(this, inner));
                            }
                        }
                        currentResults = this.results;
                    }
                    foreach (Result <T> result2 in currentResults.Skip(nextResultIndex))
                    {
                        yield return(result2);
                    }
                    nextResultIndex = currentResults.Count;
                }while (!currentResults.IsComplete);
            }
            yield break;
        }