您的位置:首页 > 其它

蛙蛙推荐:写了一个简单的延迟队列

2011-07-07 10:47 344 查看
写了一个简单的延迟队列,用于处理短时大量请求的情况,可以设置队列处理Handler,每次取队列的时间间隔,以及每次取多少队列项进行处理。

队列处理是同步执行。

public class LazyQueue<T>
{
public LazyQueue(Action<T> handler, int inteval, int onecount)
{
_handler = handler;
_inteval = inteval;
_onecount = onecount;
_t = new Thread(ThreadProc);
_t.Name = "LazyQueue";
_t.IsBackground = true;
}
public void EnQueue(T item)
{
lock (_queue)
{
_queue.Enqueue(item);
}
}
public void Start()
{
_t.Start();
}

private void ThreadProc(object state)
{
while (true)
{
try
{
List<T> tempItems = new List<T>(_onecount);
lock (_queue)
{
for (int i = _onecount - 1; i >= 0; i--)
{
if (_queue.Count > 0)
{
tempItems.Add(_queue.Dequeue());
}
}
}
tempItems.ForEach(_handler);

}
catch (Exception ex)
{
System.Diagnostics.Trace.TraceError("ThreadProc error:{0}", ex);
}

Thread.Sleep(_inteval);
}
}

private Queue<T> _queue = new Queue<T>();
private Action<T> _handler = null;
private int _inteval = 0;
private int _onecount = 0;
private Thread _t = null;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: