internal PrioritizedQueue(string resetEventName, PrioritizedQueueServiceTask <T> serviceTask, ushort priority) { _signal = new TaskEventWaitHandle(false, resetEventName, priority); SafeWaitHandle = _signal.SafeWaitHandle; serviceTask.AddResetEvent(_signal); _signal.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) { _loopWaitHandleList.Add(_loopWaitHandleList.Count, resetEvent); }