C#應用隊列(Queue)處理簡略的並提問題。本站提示廣大學習愛好者:(C#應用隊列(Queue)處理簡略的並提問題)文章只能為提供參考,不一定能成為您想要的結果。以下是C#應用隊列(Queue)處理簡略的並提問題正文
本文經由過程實例,更詳細的講授了隊列,隊列(Queue)代表了一個先輩先出的對象聚集。當您須要對各項停止先輩先出的拜訪時,則應用隊列。當您在列表中添加一項,稱為入隊,當您從列表中移除一項時,稱為出隊。
有一個場景:一個搶購的項目,假定有5件商品,誰先搶到誰可以買,然則假如此時此刻(這裡的此時此刻假定是雷同的時光),有100人去搶這個商品,假如應用日常平凡的辦法會湧現甚麼情形呢?你懂的,這裡所說是就是有關並發的成績。
日常平凡我們去超市購物去結賬的時刻就是列隊,這裡我們先讓搶購人排好隊,按時光,誰先點擊的搶購按鈕誰就排在後面,如許就構成了一個隊列,然後我們再對這個隊列處置,如許就不會湧現並發的成績了。(至多可以處置如許簡略的並發,這裡不評論辯論太龐雜的並發)
案例:
請求:有一個宣布文章的接口,每宣布一篇文章,挪用一下接口。(這裡不消批量宣布,為了講授這個)
樹立一個如許的處置法式類,BusinessInfoHelper.cs
namespace MyNameSpace { //隊列暫時類 public class QueueInfo { public string medias { get; set; } public string proids { get; set; } public string host { get; set; } public string userid { get; set; } public string feedid { get; set; } } public class BusinessInfoHelper { #region 處理宣布時含有優良媒體時,前台頁面卡住的景象 //道理:應用臨盆者花費者形式停止出列出列操作 public readonly static BusinessInfoHelper Instance = new BusinessInfoHelper(); private BusinessInfoHelper() { } private Queue<QueueInfo> ListQueue = new Queue<QueueInfo>(); public void AddQueue(string medias, string proids, string host, string userid, string feedid) //出列 { QueueInfo queueinfo = new QueueInfo(); queueinfo.medias = medias; queueinfo.proids = proids; queueinfo.host = host; queueinfo.userid = userid; queueinfo.feedid = feedid; ListQueue.Enqueue(queueinfo); } public void Start()//啟動 { Thread thread = new Thread(threadStart); thread.IsBackground = true; thread.Start(); } private void threadStart() { while (true) { if (ListQueue.Count > 0) { try { ScanQueue(); } catch (Exception ex) { LO_LogInfo.WLlog(ex.ToString()); } } else { //沒有義務,歇息3秒鐘 Thread.Sleep(3000); } } } //要履行的辦法 private void ScanQueue() { while (ListQueue.Count > 0) { try { //從隊列中掏出 QueueInfo queueinfo = ListQueue.Dequeue(); //掏出的queueinfo便可以用了,外面有你要的器械 //以下就是處置法式了 //。。。。。。 } catch (Exception ex) { throw; } } } #endregion } }
以上頁面寫好後,在法式開端運轉時就得啟動這個線程去一直的處置義務,那末我們在Global的Application_Start裡可以如許寫:
//啟動宣布優良媒體法式
MyNameSpace.BusinessInfoHelper.Instance.Start();
有一個成績出來了,假如我處置完隊列中的一筆記錄後,想前往這筆記錄的ID,這個法式似乎不克不及完成,我就應用了另外一個辦法 Lock辦法 ,把辦法鎖定,詳細的以下,
在頁面中界說全局的鎖:
private static object lockObject= new Object();
在辦法中如許挪用:
lock(lockObject)
{
//........
}
以上是本文的全體內容,願望對年夜家進一步進修隊列有所贊助