public static void EndClose(IAsyncResult result)
 {
     // result can be either an CloseOperation or a CompletedAsyncResult
     if (result is CompletedAsyncResult)
     {
         CompletedAsyncResult.End(result);
     }
     else
     {
         CloseOperation.End(result);
     }
 }
            public IAsyncResult BeginClose(TimeSpan timeout, AsyncCallback callback, object state)
            {
                CloseOperation op = null;

                lock (ThisLock)
                {
                    if (openCount > 0)
                    {
                        --openCount;
                    }
                    if (openCount > 0)
                    {
                        return(new CompletedAsyncResult(callback, state));
                    }
                    else
                    {
                        op = new CloseOperation(this, peerNode, timeout, callback, state);
                        queue.Enqueue(op);
                        RunQueue();
                    }
                }
                return(op);
            }
 public IAsyncResult BeginClose(TimeSpan timeout, AsyncCallback callback, object state)
 {
     CloseOperation item = null;
     lock (this.ThisLock)
     {
         if (this.openCount > 0)
         {
             this.openCount--;
         }
         if (this.openCount > 0)
         {
             return new CompletedAsyncResult(callback, state);
         }
         item = new CloseOperation(this, this.peerNode, timeout, callback, state);
         this.queue.Enqueue(item);
         this.RunQueue();
     }
     return item;
 }
 public IAsyncResult BeginClose(TimeSpan timeout, AsyncCallback callback, object state)
 {
     CloseOperation op = null;
     lock (ThisLock)
     {
         if (openCount > 0)
         {
             --openCount;
         }
         if (openCount > 0)
         {
             return new CompletedAsyncResult(callback, state);
         }
         else
         {
             op = new CloseOperation(this, peerNode, timeout, callback, state);
             queue.Enqueue(op);
             RunQueue();
         }
     }
     return op;
 }