您好,欢迎访问一九零五行业门户网

c# LazyQueue<T>实现

有时候,当任务比较多的时候,需要做一个队列。当队列数量达到一定数量时候,进行出队并处理,但是如果很长时间都没有达到那个数量呢?那就加一个时间限制,例如30分钟,1000个元素,哪一个条件先达到都会执行出队操作。
lazyqueue8742468051c85b06f0a0af9e3e506b5c类的实现:
using system; using system.collections.generic; using system.linq; using system.text; using system.threading; namespace servertoolserver.util { /// <summary> /// 到指定的秒数或到达某个数量执行出队 /// </summary> /// <typeparam name="t"></typeparam> public class lazyqueue<t> { /// <summary> /// 当前的队列 /// </summary> private queue<t> _current; /// <summary> /// 回调,当时间达到maxsec或_curentqueue达到maxnum数量时,执行 /// </summary> private action<t[]> _dequeueaction; /// <summary> /// 队列的最大数量 /// </summary> private int _maxnum; /// <summary> /// 监听队列的线程 /// </summary> private thread _executethread; /// <summary> /// 当前秒数 /// </summary> private int _currentsec = 0; /// <summary> /// 最大秒数,就执行这个方法 /// </summary> private int _maxsec; /// <summary> /// 构造器 /// </summary> /// <param name="sec">最迟的执行秒数</param> /// <param name="num">队列的最大数量</param> /// <param name="dequeueaction">出队函数</param> public lazyqueue(int sec, int num, action<t[]> dequeueaction) { this._maxsec = sec; this._maxnum = num; this._dequeueaction = dequeueaction; this._current = new queue<t>(); this._currentsec = 0; _executethread = new thread(new threadstart(() => { while (true) { this._currentsec++; if (this._current.count >= _maxnum || this._currentsec >= _maxsec) { this._dequeueaction.invoke(this._current.toarray()); ////别忘了清空队列和秒数 this._current.clear(); this._currentsec = 0; } ////每秒检测一下队列的数量和秒数 thread.sleep(1000); } })); this._executethread.start(); } /// <summary> /// 入队 /// </summary> /// <param name="value"></param> public void enqueue(t value) { this._current.enqueue(value); } /// <summary> /// 出队 /// </summary> /// <returns></returns> public t dequeue() { return this._current.dequeue(); } /// <summary> /// 清缓存 /// </summary> public void flush() { this._maxsec = 0; this._maxnum = 0; this._currentsec = 0; this._dequeueaction = null; this._current.clear(); this._executethread.abort(); } } }
以上就是c#  lazyqueue8742468051c85b06f0a0af9e3e506b5c实现的内容。
其它类似信息

推荐信息