internal PrioritizedQueue(string resetEventName, BackgroundServiceTask <T> serviceTask, ushort priority) { _itemWasReceivedSignal = new TaskEventWaitHandle(false, resetEventName, priority); SafeWaitHandle = _itemWasReceivedSignal.SafeWaitHandle; serviceTask.AddResetEvent(_itemWasReceivedSignal); _itemWasReceivedSignal.Queue = this; }
private async Task Produce(CancellationToken token, ServiceTaskWaitEventSource eventSource, TaskEventWaitHandle waitHandle) { Status = TaskStatus.Running; var item = eventSource == ServiceTaskWaitEventSource.Prioritized ? ((PrioritizedQueue <T>)waitHandle.Queue).Dequeue() : GetNextItem(); if (item != null) { await _propagationBlock.SendAsync(item, token); } }
internal void AddResetEvent(TaskEventWaitHandle resetEvent) { _itemAvailableSignalList.Add(_itemAvailableSignalList.Count, resetEvent); }