ConcurrentQueue對列的基本使用方式

来源:http://www.cnblogs.com/stevenchen2016/archive/2016/04/15/5397270.html
-Advertisement-
Play Games

隊列(Queue)代表了一個先進先出的對象集合。當您需要對各項進行先進先出的訪問時,則使用隊列。當您在列表中添加一項,稱為入隊,當您從列表中移除一項時,稱為出隊。 ConcurrentQueue<T>隊列是一個高效的線程安全的隊列,是.Net Framework 4.0,System.Collect ...


  隊列(Queue)代表了一個先進先出的對象集合。當您需要對各項進行先進先出的訪問時,則使用隊列。當您在列表中添加一項,稱為入隊,當您從列表中移除一項時,稱為出隊

  ConcurrentQueue<T>隊列是一個高效的線程安全的隊列,是.Net Framework 4.0,System.Collections.Concurrent命名空間下的一個數據結構。

 1 對列初始化:
 2 
 3 ConcurrentQueue<ApiLogContract> Queue = new ConcurrentQueue<ApiLogContract>();
 4 
 5 /// <summary>
 6 /// 單條入隊列
 7 /// </summary>
 8 /// <param name="model">入列模型</param>
 9 
10 Queue.Enqueue(model);
11 
12 
13 
14 /// <summary>
15 /// 多條入隊
16 /// </summary>
17 /// <param name="list"></param>
18 
19 List<ApiLogContract> list = new List<ApiLogContract>();
20 
21 list.add(new model{});
22 
23 list.add(new model{});
24 
25 list.add(new model{});
26 
27 list.add(new model{});
28 
29 list.ForEach(t => Enqueue(t));
30 
31 
32 
33 /// <summary>
34 /// 單條出隊
35 /// </summary>
36 /// <returns></returns>
37 
38 ApiLogContract apiLog = null;
39 Queue.TryDequeue(out apiLog);
40 
41 
42 
43 /// <summary>
44 /// 多條出隊
45 /// </summary>
46 /// <param name="count">數量</param>
47 /// <returns></returns>
48 
49 var logs = new List<ApiLogContract>();
50 
51 if (Queue.Count > 0)
52 {
53   for (int i = 0; i < count; i++)
54   {
55     var source = Dequeue();
56     if (source != null)
57     {
58       logs.Add(source);
59     }
60   }
61 }
/// <summary>
/// 獲取對列數量
/// </summary>
/// <returns></returns>
Queue.Count

以上就是對列的基本使用方法。

對列的使用場景有很多。所有要非同步處理的都可以使用對列的方式。如介面日誌非同步處理,郵件、簡訊非同步發送等。對列一般配合單例設計模式和線程一起使用更佳。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • eclipse中改變默然的workspace的方法可以有: 1.在創建project的時候,手動選擇使用新的workspace,如創建一個web project,在嚮導中的Location選項,取消使用"Use default location",同時在下麵選擇新的workspace. 2.在fil ...
  • 關於spl_autoload_register()和__autoload() 看兩者的用法: //__autoload用法 function __autoload($classname) { $filename = "./class/".$classname.".class.php"; if (is ...
  • 順序表是在電腦記憶體中以數組的形式保存的線性表,是指用一組地址連續的存儲單元依次存儲數據元素的線性結構。 這樣的存儲方式使得線性表邏輯上相鄰的元素,其在物理存儲單元中也是相鄰的。只要知道了第一個元素的存儲地址,就可以知道線性表中任何一個元素的存儲地址。因此,線性表中的任何一個元素, 本文利用C++語 ...
  • php對異常的處理與java一樣,用到的是try{}catch(){} 定義頂級異常處理器用到的函數是 set_exception_handler("My_exception"); 這裡的My_expection是開發者自定義的異常處理函數,既頂級異常處理器,只有當程式中沒有函數來處理異常才有頂級異 ...
  • 在這裡看到了這個題。層次遍歷是用隊列,一級一級地入隊列然後輸出。而用遞歸的話,我首先想到是用兩個棧來模擬隊列,在遞歸遍歷二叉樹的過程中入棧,然後最後一次性出棧。但仔細思考後發現無法做到層次遍歷。在這裡看到了正確的方法。 主要代碼如下: 1 void PrintNodeAtLevel(BiTree T ...
  • 分類:Unity、C#、VS2015 創建日期:2016-04-16 一、簡介 游戲吸引人的地方在於它的可交互性。如果游戲沒有交互,場景做得再美觀和精緻,也難以稱其為游戲。 在Unity中,游戲交互通過腳本編程來實現。腳本可以理解為附加在游戲對象上的用於定義游戲對象行為的指令代碼。通過腳本,開發者可... ...
  • static void Main(string[] args) { int meili = 0; string diyitixuanze=""; int a = 5; int b = 3; int c = 1; Console.WriteLine("第一題:假如世界末日來臨,你只能解救一種動物,你會 ...
  • Visual Studio Code (簡稱 VS Code)是由微軟研發的一款免費、開源的跨平臺文本(代碼)編輯器。在我看來它是「一款完美的編輯器」。 本文是有關 VS Code 的特性介紹與配置指南,相關設置主要針對 Mac OS X 平臺。在快捷鍵部分, ⌘ 指 Command 鍵,⇧ 指 S ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...