private static void TimerCallback(object state) { AsyncQueueReader <T> thisPtr = (AsyncQueueReader <T>)state; if (thisPtr._InputQueue.RemoveReader(thisPtr)) { thisPtr._Expired = true; thisPtr.Complete(false); } }
public bool EndDequeue(IAsyncResult result, out T value) { DataCompleteAsyncResult <T> dataResult = result as DataCompleteAsyncResult <T>; if (dataResult != null) { value = DataCompleteAsyncResult <T> .End(result); return(true); } return(AsyncQueueReader <T> .End(result, out value)); }
public static bool End(IAsyncResult asyncResult, out T value) { AsyncQueueReader <T> readerResult = ExAsyncResult.End <AsyncQueueReader <T> >(asyncResult); if (readerResult._Expired) { value = default(T); return(false); } else { value = readerResult._Item; return(true); } }
public IAsyncResult BeginDequeue(TimeSpan timeout, AsyncCallback callback, object state) { ExItem <T> item = default(ExItem <T>); lock (LockObject) { if (_QueueState == QueueState.Open) { if (_ItemQueue.HasAvailableItem) { item = _ItemQueue.DequeueAvailableItem(); } else { AsyncQueueReader <T> reader = new AsyncQueueReader <T>(this, timeout, callback, state); _QueueReader.Enqueue(reader); return(reader); } } else if (_QueueState == QueueState.Shutdown) { if (_ItemQueue.HasAvailableItem) { item = _ItemQueue.DequeueAvailableItem(); } else if (_ItemQueue.HasAnyItem) { AsyncQueueReader <T> reader = new AsyncQueueReader <T>(this, timeout, callback, state); _QueueReader.Enqueue(reader); return(reader); } } } invokeDequeueCallback(item.Callback); return(new DataCompleteAsyncResult <T>(item.GetData(), callback, state)); }