1.QueueHelper
using System.Collections.Concurrent;
using System.Runtime.CompilerServices;
namespace WindowsFormsServer.Helper
{
public static class QueueHelper<T> where T : class
{
private static ConcurrentQueue<StrongBox<T>> _queue;
public static ConcurrentQueue<StrongBox<T>> Queue
{
get { return _queue ?? (_queue = new ConcurrentQueue<StrongBox<T>>()); }
}
public static void AddQueue(T t)
{
if (_queue == null)
_queue = new ConcurrentQueue<StrongBox<T>>();
_queue.Enqueue(new StrongBox<T>(t));
}
public static T DealQueue()
{
if (_queue == null)
_queue = new ConcurrentQueue<StrongBox<T>>();
if (_queue.Count > 0)
{
StrongBox<T> t;
if (_queue.TryDequeue(out t)) return t.Value;
}
return null;
}
public static void EmptyQueue()
{
if (_queue == null)
_queue = new ConcurrentQueue<StrongBox<T>>();
StrongBox<T> t;
while(_queue.TryDequeue(out t))
t.Value = default(T);
}
}
}
2.使用方式:
//①.入队列
List<T> ts = new List<T>();
xxx //此处批量为ts集合赋值
foreach(var t in ts){
QueueHelper<T>.AddQueue(t);//入队列
}
//②.出队列
while(QueueHelper<T>.Queue.Count>0){
T tempT = QueueHelper<T>.DealQueue();
xxx //业务代码处理tempT
}