最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用隊(duì)列(Queue)解決簡(jiǎn)單的并發(fā)問(wèn)題

 更新時(shí)間:2022年04月27日 14:23:28   作者:天空依然蔚藍(lán)  
這篇文章主要介紹了使用隊(duì)列(Queue)解決簡(jiǎn)單的并發(fā)問(wèn)題,講解的很細(xì)致,喜歡的朋友們可以了解一下

本文通過(guò)實(shí)例,更具體的講解了隊(duì)列,隊(duì)列(Queue)代表了一個(gè)先進(jìn)先出的對(duì)象集合。當(dāng)您需要對(duì)各項(xiàng)進(jìn)行先進(jìn)先出的訪問(wèn)時(shí),則使用隊(duì)列。當(dāng)您在列表中添加一項(xiàng),稱為入隊(duì),當(dāng)您從列表中移除一項(xiàng)時(shí),稱為出隊(duì)。

有一個(gè)場(chǎng)景:一個(gè)搶購(gòu)的項(xiàng)目,假設(shè)有5件商品,誰(shuí)先搶到誰(shuí)可以買,但是如果此時(shí)此刻(這里的此時(shí)此刻假設(shè)是相同的時(shí)間),有100人去搶這個(gè)商品,如果使用平時(shí)的方法會(huì)出現(xiàn)什么情況呢?你懂的,這里所說(shuō)是就是有關(guān)并發(fā)的問(wèn)題。

平時(shí)我們?nèi)コ匈?gòu)物去結(jié)賬的時(shí)候就是排隊(duì),這里我們先讓搶購(gòu)人排好隊(duì),按時(shí)間,誰(shuí)先點(diǎn)擊的搶購(gòu)按鈕誰(shuí)就排在前面,這樣就形成了一個(gè)隊(duì)列,然后我們?cè)賹?duì)這個(gè)隊(duì)列處理,這樣就不會(huì)出現(xiàn)并發(fā)的問(wèn)題了。(至少可以處理這樣簡(jiǎn)單的并發(fā),這里不討論太復(fù)雜的并發(fā))

案例:

要求:有一個(gè)發(fā)布文章的接口,每發(fā)布一篇文章,調(diào)用一下接口。(這里不用批量發(fā)布,為了講解這個(gè))

建立一個(gè)這樣的處理程序類,BusinessInfoHelper.cs

namespace MyNameSpace  
 
{ 
  //隊(duì)列臨時(shí)類 
  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 解決發(fā)布時(shí)含有優(yōu)質(zhì)媒體時(shí),前臺(tái)頁(yè)面卡住的現(xiàn)象 
    //原理:利用生產(chǎn)者消費(fèi)者模式進(jìn)行入列出列操作 
 
    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()//啟動(dòng) 
    { 
      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 
        { 
          //沒(méi)有任務(wù),休息3秒鐘 
          Thread.Sleep(3000); 
        } 
      } 
    } 
 
    //要執(zhí)行的方法 
    private void ScanQueue() 
    { 
      while (ListQueue.Count > 0) 
      { 
        try 
        { 
          //從隊(duì)列中取出 
          QueueInfo queueinfo = ListQueue.Dequeue(); 
 
          //取出的queueinfo就可以用了,里面有你要的東西 
          //以下就是處理程序了 
          //。。。。。。 
 
        } 
        catch (Exception ex) 
        { 
          throw; 
        } 
      } 
    } 
 
 
    #endregion 
  } 
} 
 

以上頁(yè)面寫好后,在程序開(kāi)始運(yùn)行時(shí)就得啟動(dòng)這個(gè)線程去不停的處理任務(wù),那么我們?cè)贕lobal的Application_Start里可以這樣寫:

//啟動(dòng)發(fā)布優(yōu)質(zhì)媒體程序?
MyNameSpace.BusinessInfoHelper.Instance.Start();?

有一個(gè)問(wèn)題出來(lái)了,如果我處理完隊(duì)列中的一條記錄后,想返回這條記錄的ID,這個(gè)程序好像不能完成,我就使用了另一個(gè)方法 Lock方法 ,把方法鎖定,具體的如下,

在頁(yè)面中定義全局的鎖:

private static object lockObject= new Object();?

在方法中這樣調(diào)用:

lock(lockObject)?
?
{?
?
//........?
?
}?

以上是本文的全部?jī)?nèi)容,希望對(duì)大家進(jìn)一步學(xué)習(xí)隊(duì)列有所幫助

相關(guān)文章

  • C#中值類型和引用類型的區(qū)別深度分析

    C#中值類型和引用類型的區(qū)別深度分析

    這篇文章主要介紹了C#中值類型和引用類型的區(qū)別深度分析,以通俗易懂的語(yǔ)言形象化的分析了C#中值類型和引用類型的區(qū)別,對(duì)于深入理解C#數(shù)據(jù)類型有著不錯(cuò)的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-11-11
  • C# CancellationToken和CancellationTokenSource的用法詳解

    C# CancellationToken和CancellationTokenSource的用法詳解

    做了.net core之后,發(fā)現(xiàn)CancellationToken用的越來(lái)越平凡了。這也難怪,原來(lái).net framework使用異步的不是很多,而.net core首推異步編程,到處可以看到Task的影子,而CancellationToken正好是異步Task的一個(gè)控制器,所以花點(diǎn)時(shí)間做個(gè)筆記
    2021-06-06
  • winform中寫app.config文件時(shí)調(diào)試情況下沒(méi)有改變的原因

    winform中寫app.config文件時(shí)調(diào)試情況下沒(méi)有改變的原因

    讀取很簡(jiǎn)單基本都用過(guò) ConfigurationManager.AppSettings[""].ToString() 寫config不是很常用
    2013-02-02
  • C#網(wǎng)絡(luò)編程中常用特性介紹

    C#網(wǎng)絡(luò)編程中常用特性介紹

    這篇文章介紹了C#網(wǎng)絡(luò)編程中常用特性,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • Unity2021發(fā)布WebGL與網(wǎng)頁(yè)交互問(wèn)題的解決

    Unity2021發(fā)布WebGL與網(wǎng)頁(yè)交互問(wèn)題的解決

    本文主要介紹了Unity2021發(fā)布WebGL與網(wǎng)頁(yè)交互問(wèn)題的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • C#實(shí)現(xiàn)圖形位置組合轉(zhuǎn)換的方法

    C#實(shí)現(xiàn)圖形位置組合轉(zhuǎn)換的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)圖形位置組合轉(zhuǎn)換的方法,涉及C#使用Matrix操作圖形的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • C# 特殊的string類型詳解

    C# 特殊的string類型詳解

    本文主要介紹了C# 特殊的string類型。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • C# wpf簡(jiǎn)單顏色板的實(shí)現(xiàn)

    C# wpf簡(jiǎn)單顏色板的實(shí)現(xiàn)

    wpf本身沒(méi)有提供顏色板之類的控件,有些業(yè)務(wù)使用場(chǎng)景需要使用顏色板之類的控件,本文就簡(jiǎn)單實(shí)現(xiàn),感興趣的可以了解一下
    2021-10-10
  • KMP算法的C#實(shí)現(xiàn)方法

    KMP算法的C#實(shí)現(xiàn)方法

    這篇文章主要介紹了KMP算法的C#實(shí)現(xiàn)方法,代碼簡(jiǎn)潔實(shí)用,需要的朋友可以參考下
    2014-09-09
  • 深入c#繪制驗(yàn)證碼的詳解

    深入c#繪制驗(yàn)證碼的詳解

    本篇文章是對(duì)用c#繪制驗(yàn)證碼的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06

最新評(píng)論

交城县| 隆德县| 东兰县| 阜新市| 鄄城县| 炎陵县| 连州市| 昌江| 永州市| 西畴县| 清苑县| 汉沽区| 永宁县| 彭阳县| 五指山市| 宁陵县| 鹤壁市| 郓城县| 建德市| 塘沽区| 黄陵县| 平武县| 遂昌县| 天津市| 东源县| 珲春市| 凤台县| 肃南| 高台县| 辉县市| 固原市| 政和县| 苗栗县| 昂仁县| 广丰县| 新竹县| 石城县| 靖远县| 稻城县| 洛宁县| 迭部县|