internal override WorkItem GetNext()
 {
     CallQueued.WaitOne();
     lock (m_HighPriorityItemQueue)
     {
         if (m_HighPriorityItemQueue.Count >= 1)
         {
             return(m_HighPriorityItemQueue.Dequeue());
         }
     }
     lock (m_NormalPriorityItemQueue)
     {
         if (m_NormalPriorityItemQueue.Count >= 1)
         {
             return(m_NormalPriorityItemQueue.Dequeue());
         }
     }
     lock (m_LowPriorityItemQueue)
     {
         if (m_LowPriorityItemQueue.Count >= 1)
         {
             return(m_LowPriorityItemQueue.Dequeue());
         }
     }
     return(null);
 }
 private void PbxProvider_NewCall(object sender, NewCallEventArgs args)
 {
     _queueOfCalls.Enqueue(args.NewCall);
     CallQueued?.Invoke(this, new CallQueuedEventArgs {
         QueuedCall = args.NewCall, CurrentQueuedCallCount = _queueOfCalls.Count
     });
 }
示例#3
0
 internal virtual void QueueWorkItem(WorkItem workItem)
 {
     lock(m_WorkItemQueue)
      {
     m_WorkItemQueue.Enqueue(workItem);
     CallQueued.Release();
      }
 }
示例#4
0
        public void Abort()
        {
            CallQueued.Release(Int32.MaxValue);

            foreach (WorkerThread thread in m_WorkerThreads)
            {
                thread.m_ThreadObj.Abort();
            }
            CallQueued.Close();
        }
示例#5
0
 internal virtual WorkItem GetNext()
 {
     CallQueued.WaitOne();
     lock (m_WorkItemQueue)
     {
         if (m_WorkItemQueue.Count == 0)
         {
             return(null);
         }
         return(m_WorkItemQueue.Dequeue());
     }
 }
        internal override void QueueWorkItem(WorkItem workItem)
        {
            CallPriority priority;

            GenericContext <CallPriority> context = GenericContext <CallPriority> .Current;

            if (context == null)
            {
                priority = Priority;//Read from TLS
            }
            else
            {
                priority = context.Value;
            }
            switch (priority)
            {
            case CallPriority.Low:
            {
                lock (m_LowPriorityItemQueue)
                {
                    m_LowPriorityItemQueue.Enqueue(workItem);
                    CallQueued.Release();
                    return;
                }
            }

            case CallPriority.Normal:
            {
                lock (m_NormalPriorityItemQueue)
                {
                    m_NormalPriorityItemQueue.Enqueue(workItem);
                    CallQueued.Release();
                    return;
                }
            }

            case CallPriority.High:
            {
                lock (m_HighPriorityItemQueue)
                {
                    m_HighPriorityItemQueue.Enqueue(workItem);
                    CallQueued.Release();
                    return;
                }
            }

            default:
            {
                throw new InvalidOperationException("Unknown priority value: " + priority);
            }
            }
        }
示例#7
0
        public void Close()
        {
            if (CallQueued.SafeWaitHandle.IsClosed)
            {
                return;
            }
            CallQueued.Release(Int32.MaxValue);

            foreach (WorkerThread thread in m_WorkerThreads)
            {
                thread.Kill();
            }
            CallQueued.Close();
        }