public IEnumerable <T> AsEnumerable() { lock (sync) { foreach (var item in items) { yield return(item); } if (!complete) { while (iter.MoveNext()) { items = items.Add(iter.Current); yield return(iter.Current); } complete = true; } } }