解决方案 »

  1.   

     public class SecurityQueue<T>
        {
            private readonly List<T> _operations;
            private object objLock = new object();
            public SecurityQueue()
            {
                _operations = new List<T>();
            }        /// <summary>
            /// 将对象添加到 CustomQueue 的结尾处。
            /// </summary>
            /// <param name="item"></param>
            public void Enqueue(T item)
            {
                lock (objLock)
                {
                    _operations.Add(item);
                }
            }        /// <summary>
            /// 移除并返回位于 CustomQueue 开始处的对象。
            /// </summary>
            /// <returns></returns>
            public T Dequeue()
            {
                lock (objLock)
                {
                    if (_operations.Count > 0)
                    {
                        T item = _operations[0];
                        _operations.RemoveAt(0);
                        return item;
                    }
                    return default(T);
                }
            }        /// <summary>
            /// 返回位于 CustomQueue 开始处的对象但不将其移除。
            /// </summary>
            /// <returns></returns>
            public T Peek()
            {
                lock (objLock)
                {
                    if (_operations.Count > 0)
                    {
                        return _operations[0];
                    }
                    return default(T);
                }
            }        /// <summary>
            /// 包含从 Queue 复制的元素的新数组。
            /// </summary>
            /// <returns></returns>
            public T[] ToArray()
            {
                lock (objLock)
                {
                    return _operations.ToArray();
                }
            }        /// <summary>
            ///  从 Queue 中移除所有对象。
            /// </summary>
            public void Clear()
            {
                lock (objLock)
                {
                    _operations.Clear();
                }
            }
            /// <summary>
            /// 确定某元素是否在 Queue 中。
            /// </summary>
            /// <param name="item"></param>
            /// <returns></returns>
            public bool Contains(T item)
            {
                lock (objLock)
                {
                    return _operations.Contains(item);
                }
            }        /// <summary>
            /// 确定某元素是否在 Queue 中。
            /// </summary>
            /// <param name="item"></param>
            /// <returns></returns>
            public bool Exists(Predicate<T> match)
            {
                lock (objLock)
                {
                    return _operations.Exists(match);
                }
            }        /// <summary>
            ///  获取 CustomQueue 中包含的元素数。
            /// </summary>
            public int Count
            {
                get
                {
                    return _operations.Count;
                }
            }        /// <summary>
            /// 插入到首位置
            /// </summary>
            /// <param name="buffer"></param>
            public void Push(T item)
            {
                lock (objLock)
                {
                    _operations.Insert(0, item);
                }
            }    }上面是个队列程序
    定义全局变量弄个静太的就成
    public static SecurityQueue<xxxx> queue=new SecurityQueue<xxxx>()
    然后在你的接口接收的地方if(xxx==普通)
     xxx.queue.Push(xxx)
    else//高级
     xxx.queue.Enqueue(xxx)//放到队尾
    上面的Push方法要改进一下,就是普通的来了放到第一个高级前面就可以了不要一直放到最前面,这个自己用List的FindIndex改一下就可以了
      

  2.   

    比较好奇为何会有这样的需求
    个人觉得1L贴的代码只能解决一个优先队列的问题
    但是当你将别人的请求放在自己的队列里面再逐个处理这个不好办吧,就算你在某个时刻有100的并发LZ可以去看下asp.net的httphandler,那里的请求入口可以拦截请求,但是把请求放队列里面再处理可以实现吗?应该不可以吧!
      

  3.   

    存到数据库里,或DataTable里,加个排序字段就可以啦