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)); }
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)); }
public bool EndWaitForItem(IAsyncResult result) { if (result is CompletedAsyncResult <bool> ) { return(CompletedAsyncResult <bool> .End(result)); } return(AsyncQueueWaiter <T> .End(result)); }
public bool EndWaitForItem(IAsyncResult result) { CompletedAsyncResult <bool> typedResult = result as CompletedAsyncResult <bool>; if (typedResult != null) { return(CompletedAsyncResult <bool> .End(result)); } return(AsyncQueueWaiter.End(result)); }
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)); }
static void TimerCallback(object state) { AsyncQueueWaiter thisPtr = (AsyncQueueWaiter)state; thisPtr.Complete(false); }
public static bool End(IAsyncResult result) { AsyncQueueWaiter waiterResult = AsyncResult.End <AsyncQueueWaiter>(result); return(waiterResult.itemAvailable); }