public virtual PreemptiveRequest Request(int priority = 1, bool preempt = false)
        {
            var request = new PreemptiveRequest(Environment, TriggerRelease, DisposeCallback, priority, preempt);

            if (!RequestQueue.ContainsKey(request.Priority))
            {
                RequestQueue.Add(request.Priority, new LinkedList <PreemptiveRequest>());
            }
            RequestQueue[request.Priority].AddLast(request);
            TriggerRequest();
            return(request);
        }
        public virtual PriorityRequest Request(int priority = 1)
        {
            var request = new PriorityRequest(Environment, TriggerRelease, DisposeCallback, priority);

            if (!RequestQueue.ContainsKey(priority))
            {
                RequestQueue.Add(priority, new LinkedList <PriorityRequest>());
            }
            RequestQueue[priority].AddLast(request);
            TriggerRequest();
            return(request);
        }