private bool TryReadCore(out T item)
 {
     if (_items.TryDequeue(out item))
     {
         if (_doneWriting != null && _items.IsEmpty)
         {
             CompleteWithOptionalError(_completion, _doneWriting);
         }
         return(true);
     }
     return(false);
 }
 private bool TryRead(out T item)
 {
     if (_items.TryDequeue(out item))
     {
         if (_doneWriting != null && _items.IsEmpty)
         {
             ChannelUtilities.Complete(_completion, _doneWriting);
         }
         return(true);
     }
     return(false);
 }