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; }