一、什么是队列
队列(Queue)代表了一个先进先出的对象集合。当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队。
这是摘抄网上的。做了个demo,但笔者技术有限,如有改进的地方,欢迎大神多多指导。
二、利用队列来处理订单问题
思路:开启一个线程去创建订单,同时处理订单线程开启,如队列里有订单,那么就处理,直到没有就一直处于等待状态(这里我等待20次就退出),等待订单加入队列再继续处理订单。
1、新建一个订单OrderInfo(用的是结构)
public struct OrderInfo { public int OrderId { get; set; } public int ProductId { get; set; } public Decimal Price { get; set; } public string Remarks { get; set; } }
2、到控制执行
class Program { public static readonly Queue<OrderInfo> queue = new Queue<OrderInfo>(); public static object obj = new object(); static void Main(string[] args) { #region 模仿淘宝处理订单问题 //订单进入队列等待 Task OrderTask = new Task(CreateOrder); OrderTask.Start(); //开启线程处理订单 Task taskDeal = new Task(DealOrder); taskDeal.Start(); Console.WriteLine("hello"); #endregion Console.ReadKey(); } public static void CreateOrder() { for (int i = 1; i < 50; i++) { Thread.Sleep(300); lock (obj) { OrderInfo order = new OrderInfo(); order.OrderId = i; order.ProductId = 2800 + i; order.Price = 888; order.Remarks = "quick send goods"; queue.Enqueue(order); Console.WriteLine("添加了一条订单" + i); } } } public static int flag = 0; public static void DealOrder() { while (true) { Thread.Sleep(500); if (queue.Count > 0) { lock (obj) { if (queue.Count > 0) { OrderInfo order = queue.Dequeue(); Console.WriteLine("处理==>订单号{0};商品:{1}价格:{2}", order.OrderId, order.ProductId, order.Price); } } } else { Thread.Sleep(2000); flag++; if (flag > 10) { Console.WriteLine("All Over"); break; } lock (obj) { if (queue.Count <= 0) { Console.WriteLine("订单处理完成,等待中。。。"); } } } } } }
测试截图如下:
如对本文有疑问, 点击进行留言回复!!
《UnityAPI.Particle粒子》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+Particle+lifetime+startColor+立钻哥哥++OK++)
8寸扫码三防军工平板手持终端,双色注塑模/康宁大猩猩玻璃/10点电容屏
信创舆情一线--十五部门印发指导意见进一步促进服务型制造发展
网友评论