예제 #1
0
        /// <summary>
        /// Enqueue a WorkQueue entry for processing.
        /// </summary>
        /// <param name="processor"></param>
        /// <param name="item"></param>
        /// <param name="del"></param>
        public void Enqueue(IWorkQueueItemProcessor processor, Model.WorkQueue item, WorkQueueThreadDelegate del)
        {
            WorkQueueThreadParameter parameter = new WorkQueueThreadParameter(processor, item, del);

            lock (_syncLock)
            {
                if (item.WorkQueuePriorityEnum.Equals(WorkQueuePriorityEnum.High))
                {
                    _highPriorityCount++;
                }
                if (item.WorkQueuePriorityEnum.Equals(WorkQueuePriorityEnum.Stat))
                {
                    _highPriorityCount++;
                }

                WorkQueueTypeProperties prop = _workQueuePropList[item.WorkQueueTypeEnum];
                if (prop.MemoryLimited)
                {
                    _memoryLimitedCount++;
                }

                _totalThreadCount++;

                _queuedItems.Add(parameter);
            }

            Enqueue(parameter, delegate(WorkQueueThreadParameter threadParameter)
            {
                threadParameter.Delegate(threadParameter.Processor, threadParameter.Item);

                QueueItemComplete(threadParameter.Item);
            });
        }
예제 #2
0
 public WorkQueueThreadParameter(IWorkQueueItemProcessor processor, Model.WorkQueue item, WorkQueueThreadDelegate del)
 {
     _item      = item;
     _processor = processor;
     _del       = del;
 }