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