Exemplo n.º 1
0
        public IAsyncResult BeginWaitForItem(TimeSpan timeout, AsyncCallback callback, object state)
        {
            lock (ThisLock)
            {
                if (queueState == QueueState.Open)
                {
                    if (!itemQueue.HasAvailableItem)
                    {
                        AsyncQueueWaiter waiter = new AsyncQueueWaiter(timeout, callback, state);
                        waiterList.Add(waiter);
                        return(waiter);
                    }
                }
                else if (queueState == QueueState.Shutdown)
                {
                    if (!itemQueue.HasAvailableItem && itemQueue.HasAnyItem)
                    {
                        AsyncQueueWaiter waiter = new AsyncQueueWaiter(timeout, callback, state);
                        waiterList.Add(waiter);
                        return(waiter);
                    }
                }
            }

            return(new CompletedAsyncResult <bool>(true, callback, state));
        }
Exemplo n.º 2
0
        public Task <bool> WaitForItemAsync(CancellationToken cancellationToken, object state)
        {
            lock (ThisLock)
            {
                if (queueState == QueueState.Open)
                {
                    if (!itemQueue.HasAvailableItem)
                    {
                        AsyncQueueWaiter waiter = new AsyncQueueWaiter(cancellationToken, state);
                        waiterList.Add(waiter);
                        return(waiter.Task);
                    }
                }
                else if (queueState == QueueState.Shutdown)
                {
                    if (!itemQueue.HasAvailableItem && itemQueue.HasAnyItem)
                    {
                        AsyncQueueWaiter waiter = new AsyncQueueWaiter(cancellationToken, state);
                        waiterList.Add(waiter);
                        return(waiter.Task);
                    }
                }
            }

            return(Task.FromResult(true));
        }
Exemplo n.º 3
0
 public bool EndWaitForItem(IAsyncResult result)
 {
     if (result is CompletedAsyncResult <bool> )
     {
         return(CompletedAsyncResult <bool> .End(result));
     }
     return(AsyncQueueWaiter <T> .End(result));
 }
Exemplo n.º 4
0
        public bool EndWaitForItem(IAsyncResult result)
        {
            CompletedAsyncResult <bool> typedResult = result as CompletedAsyncResult <bool>;

            if (typedResult != null)
            {
                return(CompletedAsyncResult <bool> .End(result));
            }

            return(AsyncQueueWaiter.End(result));
        }
Exemplo n.º 5
0
 public IAsyncResult BeginWaitForItem(TimeSpan timeout, AsyncCallback callback, object state)
 {
     lock (this.ThisLock)
     {
         if (this.queueState == QueueState <T> .Open)
         {
             if (!this.itemQueue.HasAvailableItem)
             {
                 AsyncQueueWaiter <T> item = new AsyncQueueWaiter <T>(timeout, callback, state);
                 this.waiterList.Add(item);
                 return(item);
             }
         }
         else if (((this.queueState == QueueState <T> .Shutdown) && !this.itemQueue.HasAvailableItem) && this.itemQueue.HasAnyItem)
         {
             AsyncQueueWaiter <T> waiter2 = new AsyncQueueWaiter <T>(timeout, callback, state);
             this.waiterList.Add(waiter2);
             return(waiter2);
         }
     }
     return(new CompletedAsyncResult <bool>(true, callback, state));
 }
Exemplo n.º 6
0
            static void TimerCallback(object state)
            {
                AsyncQueueWaiter thisPtr = (AsyncQueueWaiter)state;

                thisPtr.Complete(false);
            }
Exemplo n.º 7
0
            public static bool End(IAsyncResult result)
            {
                AsyncQueueWaiter waiterResult = AsyncResult.End <AsyncQueueWaiter>(result);

                return(waiterResult.itemAvailable);
            }