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

C# 多線程處理List數(shù)據(jù)的示例代碼

 更新時間:2020年12月14日 08:53:15   作者:傅小灰  
這篇文章主要介紹了C# 多線程處理List數(shù)據(jù)的示例代碼,幫助大家更好的理解和使用c#編程語言,感興趣的朋友可以了解下

代碼思路

將要處理的數(shù)據(jù)放到ConcurrentQueue中,然后開啟多個線程去處理數(shù)據(jù),處理完成后,再到隊列中獲取下一個待處理數(shù)據(jù)。

ConcurrentQueue 表示線程安全的先進先出 (FIFO) 集合,屬于 System.Collections.Concurrent 命名空間下的一個數(shù)據(jù)結構

直接上代碼

/// <summary>
/// 多線程處理數(shù)據(jù)(無返回值)
/// </summary>
/// <typeparam name="T">數(shù)據(jù)類型</typeparam>
/// <param name="list">待處理數(shù)據(jù)</param>
/// <param name="action">數(shù)據(jù)處理方法(有參數(shù)無返回值)</param>
/// <param name="count">處理線程數(shù)量</param>
/// <param name="waitFlag">是否等待執(zhí)行結束</param>
static void RunTask<T>(List<T> list, Action<T> action, int threadCount = 5, bool waitFlag = true)
{
  ConcurrentQueue<T> queue = new ConcurrentQueue<T>(list);
  Task[] tasks = new Task[threadCount];
  for (int i = 0; i < threadCount; i++)
  {
    tasks[i] = Task.Run(() =>
     {
       while (queue.TryDequeue(out T t))
       {
         action(t);
       }
     });
  }
  if (waitFlag)
  {
    Task.WaitAll(tasks);
  }
}
/// <summary>
/// 多線程處理數(shù)據(jù)(返回處理后列表)
/// </summary>
/// <typeparam name="T">數(shù)據(jù)類型</typeparam>
/// <param name="list">待處理數(shù)據(jù)</param>
/// <param name="func">數(shù)據(jù)處理方法(有參數(shù)有返回值)</param>
/// <param name="threadCount">處理線程數(shù)量</param>
/// <returns>數(shù)據(jù)處理后結果</returns>
static List<T> RunTask<T>(List<T> list, Func<T, T> func, int threadCount = 5)
{
  var result = new List<T>();
  ConcurrentQueue<T> queue = new ConcurrentQueue<T>(list);
  Task<List<T>>[] tasks = new Task<List<T>>[threadCount];
  for (int i = 0; i < threadCount; i++)
  {
    tasks[i] = Task.Run<List<T>>(() =>
    {
      var rList = new List<T>();
      while (queue.TryDequeue(out T t))
      {
        rList.Add(func(t));
      }
      return rList;
    });
  }
  Task.WaitAll(tasks);
  for (int i = 0; i < threadCount; i++)
  {
    result.AddRange(tasks[i].Result);
  }
  return result;
}

調(diào)用方法

List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
//輸出列表中的數(shù)據(jù),且加上“action”字符前綴
RunTask<int>(list, d => { Console.WriteLine("action" + d); });

//對列表中數(shù)據(jù)都執(zhí)行 “*2” 的操作
var result = RunTask<int>(list, d => { return d * 2; });
result.ForEach(d => Console.WriteLine(d));

最后的話

上面的代碼只是簡單的實現(xiàn)了對數(shù)據(jù)的處理,并沒有考慮到對內(nèi)存的使用限制,一般的項目中使用還是可以的。
最后我嘗試了下,生成一個100M的列表,然后將其加載到ConcurrentQueue,監(jiān)控程序內(nèi)存占用,發(fā)現(xiàn)沒有很大的內(nèi)存占用變化。

以上就是C# 多線程處理List數(shù)據(jù)的示例代碼的詳細內(nèi)容,更多關于c# 處理list數(shù)據(jù)的資料請關注腳本之家其它相關文章!

相關文章

  • c# 托盤雙擊不觸發(fā)單擊事件的實現(xiàn)方法

    c# 托盤雙擊不觸發(fā)單擊事件的實現(xiàn)方法

    在開發(fā)winform的時候我發(fā)現(xiàn),當執(zhí)行雙擊操作(notifyIcon1_MouseDoubleClick)時,會同時伴隨著單擊事件(notifyIcon1_MouseClick)的發(fā)生。。那如何才能使雙擊事件不觸發(fā)單擊事件呢?
    2009-02-02
  • C#微信開發(fā)之自定義菜單管理

    C#微信開發(fā)之自定義菜單管理

    本文主要介紹了C#微信開發(fā)中自定義菜單管理的相關知識,具有一定的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • C#微信公眾號開發(fā)之接收事件推送與消息排重的方法

    C#微信公眾號開發(fā)之接收事件推送與消息排重的方法

    這篇文章主要介紹了C#微信公眾號開發(fā)之接收事件推送與消息排重的方法,詳細分析了事件推送與消息排重的使用技巧,對微信開發(fā)有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • Unity UGUI的LayoutElement布局元素組件介紹使用示例

    Unity UGUI的LayoutElement布局元素組件介紹使用示例

    這篇文章主要為大家介紹了Unity UGUI的LayoutElement布局元素組件介紹使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • C#中同步和異步回調(diào)的實現(xiàn)

    C#中同步和異步回調(diào)的實現(xiàn)

    在C#中,同步回調(diào)和異步回調(diào)都是用于處理任務或事件完成的機制,本文主要介紹了C#中同步和異步回調(diào)的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2025-04-04
  • 基于WPF實現(xiàn)3D導航欄控件

    基于WPF實現(xiàn)3D導航欄控件

    這篇文章主要介紹了如何基于WPF實現(xiàn)簡單的3D導航欄控件效果,文中的示例代碼講解詳細,對我們的學習或工作有一定幫助,需要的小伙伴可以參考一下
    2024-03-03
  • C#和Java互相調(diào)用的方法小結

    C#和Java互相調(diào)用的方法小結

    這篇文章主要介紹了C#和Java互相調(diào)用的方法,文中展示了如何在不同編程語言之間實現(xiàn)互操作,每種語言之間的互操作都有其特定的方法和工具,希望這些示例能夠幫助你更好地理解和實現(xiàn)跨語言調(diào)用,需要的朋友可以參考下
    2025-04-04
  • C#實現(xiàn)給圖片添加日期信息的示例詳解

    C#實現(xiàn)給圖片添加日期信息的示例詳解

    這篇文章主要為大家詳細介紹了如何利用C#實現(xiàn)給圖片添加日期信息,文中的示例代碼講解詳細,對我們學習C#有一定的幫助,感興趣的小伙伴可以了解一下
    2022-12-12
  • C#使用融合通信API發(fā)送手機短信功能

    C#使用融合通信API發(fā)送手機短信功能

    融合云通信服務平臺,為企業(yè)提供全方位通信服務,發(fā)送手機短信是其一項核心功能,本文介紹了如何使用融合云通信服務平臺的API通過C#實現(xiàn)發(fā)送手機短信的功能,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • C#與java TCP通道加密通信實例

    C#與java TCP通道加密通信實例

    這篇文章主要介紹了C#與java TCP通道加密通信,文章通過真實的案例詳細講解說明C#與java TCP通道加密通信的相關資料,需要的小伙伴可以參考一下
    2021-10-10

最新評論

玉林市| 咸宁市| 怀宁县| 海南省| 甘孜县| 永善县| 海林市| 水富县| 拜泉县| 利辛县| 常宁市| 北流市| 水城县| 壤塘县| 道真| 句容市| 金门县| 喜德县| 曲麻莱县| 台南市| 武乡县| 望都县| 宜兰市| 临沧市| 洞口县| 北安市| 尼玛县| 西林县| 广丰县| 曲周县| 江阴市| 仁布县| 德格县| 山阴县| 利津县| 垦利县| 界首市| 凉城县| 宜春市| 板桥市| 义乌市|