static async UniTaskVoid ConsumeAll(_Queue self, IUniTaskAsyncEnumerator <TSource> enumerator,
                                                ChannelWriter <TSource> writer)
            {
                try {
                    while (await enumerator.MoveNextAsync())
                    {
                        writer.TryWrite(enumerator.Current);
                    }

                    writer.TryComplete();
                }
                catch (Exception ex) {
                    writer.TryComplete(ex);
                }
                finally {
                    self.channelClosed = true;
                    await enumerator.DisposeAsync();
                }
            }
 private void BFS(Node root)
 {
     if (root != null)
     {
         _Queue <Node> q = new _Queue <Node>();
         q.Enqueue(root);
         while (!q.isEmpty())
         {
             var node = q.Dequeue();
             if (node != null)
             {
                 Console.WriteLine("Element : {0}", node.Value);
             }
             if (node.LeftChild != null)
             {
                 q.Enqueue(node.LeftChild);
             }
             if (node.RightChild != null)
             {
                 q.Enqueue(node.RightChild);
             }
         }
     }
 }