public bool WaitForItem(TimeSpan timeout) { WaitQueueWaiter waiter = null; bool itemAvailable = false; lock (ThisLock) { if (queueState == QueueState.Open) { if (itemQueue.HasAvailableItem) { itemAvailable = true; } else { waiter = new WaitQueueWaiter(); waiterList.Add(waiter); } } else if (queueState == QueueState.Shutdown) { if (itemQueue.HasAvailableItem) { itemAvailable = true; } else if (itemQueue.HasAnyItem) { waiter = new WaitQueueWaiter(); waiterList.Add(waiter); } else { return(true); } } else { // queueState == QueueState.Closed return(true); } } if (waiter != null) { return(waiter.Wait(timeout)); } else { return(itemAvailable); } }
public Task <bool> WaitForItemAsync(CancellationToken token) { WaitQueueWaiter waiter = null; bool itemAvailable = false; lock (ThisLock) { if (queueState == QueueState.Open) { if (itemQueue.HasAvailableItem) { itemAvailable = true; } else { waiter = new WaitQueueWaiter(); waiterList.Add(waiter); } } else if (queueState == QueueState.Shutdown) { if (itemQueue.HasAvailableItem) { itemAvailable = true; } else if (itemQueue.HasAnyItem) { waiter = new WaitQueueWaiter(); waiterList.Add(waiter); } else { return(Task.FromResult(true)); } } else // queueState == QueueState.Closed { return(Task.FromResult(true)); } } if (waiter != null) { return(waiter.WaitAsync(token)); } else { return(Task.FromResult(itemAvailable)); } }
public bool WaitForItem(TimeSpan timeout) { WaitQueueWaiter <T> item = null; bool flag = false; lock (this.ThisLock) { if (this.queueState == QueueState <T> .Open) { if (this.itemQueue.HasAvailableItem) { flag = true; } else { item = new WaitQueueWaiter <T>(); this.waiterList.Add(item); } } else if (this.queueState == QueueState <T> .Shutdown) { if (!this.itemQueue.HasAvailableItem) { if (!this.itemQueue.HasAnyItem) { return(true); } item = new WaitQueueWaiter <T>(); this.waiterList.Add(item); } else { flag = true; } } else { return(true); } } if (item != null) { return(item.Wait(timeout)); } return(flag); }