问题描述
请教大家一个问题,接口该如何实现某个请求优先处理?比如说有一个接口的参数有会员账号、时间等,会员账号的类型有:高级、普通我想优先处理普通账号的请求,比如说有100个等待处理的请求中有60个普通账号的请求,有40个是高级账号的请求,我想优先处理普通账号的请求再去处理高级账号的请求。不知该如何存储、排序、再处理这些请求。请大家帮帮忙,给些思路。
解决方案
解决方案二:
publicclassSecurityQueue<T>{privatereadonlyList<T>_operations;privateobjectobjLock=newobject();publicSecurityQueue(){_operations=newList<T>();}///<summary>///将对象添加到CustomQueue的结尾处。///</summary>///<paramname="item"></param>publicvoidEnqueue(Titem){lock(objLock){_operations.Add(item);}}///<summary>///移除并返回位于CustomQueue开始处的对象。///</summary>///<returns></returns>publicTDequeue(){lock(objLock){if(_operations.Count>0){Titem=_operations[0];_operations.RemoveAt(0);returnitem;}returndefault(T);}}///<summary>///返回位于CustomQueue开始处的对象但不将其移除。///</summary>///<returns></returns>publicTPeek(){lock(objLock){if(_operations.Count>0){return_operations[0];}returndefault(T);}}///<summary>///包含从Queue复制的元素的新数组。///</summary>///<returns></returns>publicT[]ToArray(){lock(objLock){return_operations.ToArray();}}///<summary>///从Queue中移除所有对象。///</summary>publicvoidClear(){lock(objLock){_operations.Clear();}}///<summary>///确定某元素是否在Queue中。///</summary>///<paramname="item"></param>///<returns></returns>publicboolContains(Titem){lock(objLock){return_operations.Contains(item);}}///<summary>///确定某元素是否在Queue中。///</summary>///<paramname="item"></param>///<returns></returns>publicboolExists(Predicate<T>match){lock(objLock){return_operations.Exists(match);}}///<summary>///获取CustomQueue中包含的元素数。///</summary>publicintCount{get{return_operations.Count;}}///<summary>///插入到首位置///</summary>///<paramname="buffer"></param>publicvoidPush(Titem){lock(objLock){_operations.Insert(0,item);}}}上面是个队列程序定义全局变量弄个静太的就成publicstaticSecurityQueue<xxxx>queue=newSecurityQueue<xxxx>()然后在你的接口接收的地方if(xxx==普通)xxx.queue.Push(xxx)else//高级xxx.queue.Enqueue(xxx)//放到队尾
上面的Push方法要改进一下,就是普通的来了放到第一个高级前面就可以了不要一直放到最前面,这个自己用List的FindIndex改一下就可以了
解决方案三:
解决方案四:
比较好奇为何会有这样的需求个人觉得1L贴的代码只能解决一个优先队列的问题但是当你将别人的请求放在自己的队列里面再逐个处理这个不好办吧,就算你在某个时刻有100的并发LZ可以去看下asp.net的httphandler,那里的请求入口可以拦截请求,但是把请求放队列里面再处理可以实现吗?应该不可以吧!
解决方案五:
存到数据库里,或DataTable里,加个排序字段就可以啦
解决方案六:
引用4楼WM_JAWIN的回复:
存到数据库里,或DataTable里,加个排序字段就可以啦
+1
解决方案七:
友情帮顶!
解决方案八:
为什么要分先后?