.net 接口该如何实现某个请求优先处理? .net优先级 请求 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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改一下就可以了 比较好奇为何会有这样的需求个人觉得1L贴的代码只能解决一个优先队列的问题但是当你将别人的请求放在自己的队列里面再逐个处理这个不好办吧,就算你在某个时刻有100的并发LZ可以去看下asp.net的httphandler,那里的请求入口可以拦截请求,但是把请求放队列里面再处理可以实现吗?应该不可以吧! 存到数据库里,或DataTable里,加个排序字段就可以啦 girdView按钮列怎么获取模板列行值 模态框上导出Gridview问题 Nhibernate下载 不知道哪里错了,希望那个大家帮忙看一下 请问一下,如下访问错误,是怎么回事,谢谢 有几条语句不明白?望大哥们赐教! 谁能提供一个datagrid与sql server数据库绑定的连接串 关于Infragistics.WebUI.UltraWebGrid.UltraWebGr的问题 查询数据库问题 关于ComponentArt.Web.UI.Menu的问题 跪求获取正则表达式里面的“数据”和“链接” asp.net 发布的网站,如果修改一个页面,怎么传道网上啊
{
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改一下就可以了
个人觉得1L贴的代码只能解决一个优先队列的问题
但是当你将别人的请求放在自己的队列里面再逐个处理这个不好办吧,就算你在某个时刻有100的并发LZ可以去看下asp.net的httphandler,那里的请求入口可以拦截请求,但是把请求放队列里面再处理可以实现吗?应该不可以吧!