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

c# 多線程處理多個數(shù)據(jù)的方法

 更新時間:2021年03月31日 11:00:23   作者:conan  
這篇文章主要介紹了c# 多線程處理多個數(shù)據(jù)的方法,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下

概述

多線程(multithreading),是指從軟件或者硬件上實(shí)現(xiàn)多個線程并發(fā)執(zhí)行的技術(shù)。具有多線程能力的計(jì)算機(jī)因有硬件支持而能夠在同一時間執(zhí)行多于一個線程,進(jìn)而提升整體處理性能。具有這種能力的系統(tǒng)包括對稱多處理機(jī)、多核心處理器以及芯片級多處理或同時多線程處理器。在一個程序中,這些獨(dú)立運(yùn)行的程序片段叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理”。

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

比如平常我們在處理定時任務(wù)的時候,假設(shè)就一臺機(jī)器,我們不可能單線程一條一條數(shù)據(jù)的去跑,這時候就需要提高機(jī)器資源的利用率。

下面我們來介紹下,如何實(shí)現(xiàn)多線程+隊(duì)列以提高并發(fā)處理能力。

代碼實(shí)現(xiàn)

1、定義線程數(shù)threadNum和隊(duì)列queues

  /// <summary>
    /// 線程總數(shù)
    /// </summary>
    private int threadNum = 4;

    /// <summary>
    /// 總數(shù)
    /// </summary>
    private int totalCount = 0;

    /// <summary>
    /// 已處理
    /// </summary>
    private int index = 0;

    /// <summary>
    /// 隊(duì)列
    /// </summary>
    private ConcurrentQueue<AssetRepayment> queues = new ConcurrentQueue<AssetRepayment>();

2、定義線程列表,往線程添加數(shù)據(jù)

  public void SubDeTransaction()
    {
      var list = new List<AssetRepayment>();
      for (int i = 0; i < 1000; i++)
      {
        list.Add(new AssetRepayment() { Title = i.ToString() + "---" + Guid.NewGuid().ToString() });
      }

      if (list == null || list.Count() == 0)
      {
        Console.WriteLine("沒有可執(zhí)行的數(shù)據(jù)");
        return;
      }
      totalCount = list.Count;
      Console.WriteLine("可執(zhí)行的數(shù)據(jù):" + list.Count() + "條");
      foreach (var item in list)
      {
        queues.Enqueue(item);
      }
      List<Task> tasks = new List<Task>();
      for (int i = 0; i < threadNum; i++)
      {
        var task = Task.Run(() =>
        {
          Process();
        });
        tasks.Add(task);
      }
      var taskList = Task.Factory.ContinueWhenAll(tasks.ToArray(), (ts) =>
      {
      });
      taskList.Wait();
    }

3、對線程數(shù)進(jìn)行限制 for (int i = 0; i < threadNum; i++) 

  var taskList = Task.Factory.ContinueWhenAll(tasks.ToArray(), (ts) =>
      {
      });
      taskList.Wait();

4、從隊(duì)列取出數(shù)據(jù)進(jìn)行業(yè)務(wù)處理

  private void Process()
    {
      while (true)
      {
        var currentIndex = Interlocked.Increment(ref index);
        AssetRepayment repayId = null;
        var isExit = queues.TryDequeue(out repayId);
        if (!isExit)
        {
          break;
        }
        try
        {
          Console.WriteLine(repayId.Title);

          Console.WriteLine(string.Format(" 共{0}條 當(dāng)前第{1}條", totalCount, currentIndex));
        }
        catch (Exception ex)
        {
          Console.WriteLine(ex);
        }
      }
    }

代碼地址

https://gitee.com/conanOpenSource_admin/Example

以上就是c# 多線程處理多個數(shù)據(jù)的方法的詳細(xì)內(nèi)容,更多關(guān)于c# 多線程處理多個數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解c# 多態(tài)

    詳解c# 多態(tài)

    這篇文章主要介紹了c# 多態(tài)的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 使用C#實(shí)現(xiàn)基于TCP和UDP協(xié)議的網(wǎng)絡(luò)通信程序的基本示例

    使用C#實(shí)現(xiàn)基于TCP和UDP協(xié)議的網(wǎng)絡(luò)通信程序的基本示例

    這篇文章主要介紹了使用C#實(shí)現(xiàn)基于TCP和UDP協(xié)議的網(wǎng)絡(luò)通信程序的示例,文中分別編寫了基本的服務(wù)器端和客戶端,代碼十分簡單,需要的朋友可以參考下
    2016-04-04
  • C# 最基礎(chǔ)知識介紹--多態(tài)

    C# 最基礎(chǔ)知識介紹--多態(tài)

    在本篇文章將對大家介紹得是在C#中最常用的幾種概念,即:多態(tài),下面文章內(nèi)容將對大家詳細(xì)介紹這幾種常用得狀態(tài)
    2021-09-09
  • C#實(shí)現(xiàn)數(shù)字字符串左補(bǔ)零的六種方式技巧

    C#實(shí)現(xiàn)數(shù)字字符串左補(bǔ)零的六種方式技巧

    在編程旅程中,常常會遇到需要將數(shù)字字符串左補(bǔ)齊 0 的情況,這種格式化需求在實(shí)際開發(fā)中相當(dāng)普遍,在 C# 中,實(shí)現(xiàn)數(shù)字字符串左補(bǔ)齊 0 主要有這 6 種方法,我們一起來看看吧,需要的朋友可以參考下
    2024-12-12
  • C#中this指針的用法示例

    C#中this指針的用法示例

    這篇文章主要介紹了C#中this指針的用法,對初學(xué)者而言是非常重要的概念,必須加以熟練掌握,需要的朋友可以參考下
    2014-08-08
  • c# 用Base64實(shí)現(xiàn)文件上傳

    c# 用Base64實(shí)現(xiàn)文件上傳

    這篇文章主要介紹了c# 用Base64實(shí)現(xiàn)文件上傳的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • C#創(chuàng)建及訪問網(wǎng)絡(luò)硬盤的實(shí)現(xiàn)

    C#創(chuàng)建及訪問網(wǎng)絡(luò)硬盤的實(shí)現(xiàn)

    本文主要介紹了C#創(chuàng)建及訪問網(wǎng)絡(luò)硬盤的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 使用C#判斷文件是否為圖片的多種方法

    使用C#判斷文件是否為圖片的多種方法

    在開發(fā)中,我們常需要判斷一個文件是否為圖片,這看似簡單,但要實(shí)現(xiàn)得既高效又嚴(yán)謹(jǐn),需要根據(jù)不同場景選擇合適的方法,本文記錄了幾種常見的判斷方式,并推薦使用?SixLabors.ImageSharp?來替代已被淘汰的?System.Drawing,需要的朋友可以參考下
    2024-10-10
  • Directory文件類的實(shí)例講解

    Directory文件類的實(shí)例講解

    下面小編就為大家分享一篇Directory文件類的實(shí)例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11
  • 詳解如何在C#/.NET Core中使用責(zé)任鏈模式

    詳解如何在C#/.NET Core中使用責(zé)任鏈模式

    這篇文章主要介紹了詳解如何在C#/.NET Core中使用責(zé)任鏈模式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評論

巨野县| 永宁县| 泾阳县| 连云港市| 南宁市| 洞头县| 巴林右旗| 建始县| 眉山市| 铁岭市| 广南县| 固镇县| 上高县| 高州市| 利津县| 巨鹿县| 金昌市| 休宁县| 溧阳市| 姚安县| 五华县| 锦州市| 百色市| 托里县| 台州市| 旺苍县| 新余市| 四会市| 蒲江县| 商丘市| 兴安县| 延津县| 穆棱市| 伊宁市| 乌拉特中旗| 什邡市| 应城市| 洪洞县| 寿阳县| 金川县| 双流县|