程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#應用隊列(Queue)處理簡略的並提問題

C#應用隊列(Queue)處理簡略的並提問題

編輯:C#入門知識

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) 
 

 
//........ 
 

以上是本文的全體內容,願望對年夜家進一步進修隊列有所贊助

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved