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

C# List 并發(fā)丟數(shù)據(jù)問題原因及解決方案

 更新時(shí)間:2021年02月20日 08:41:35   作者:丹楓無跡  
這篇文章主要介紹了C# List 并發(fā)丟數(shù)據(jù)問題原因及解決方案,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下

項(xiàng)目中出了個(gè) BUG,就在我眼皮子底下,很明顯的一個(gè) BUG,愣是看了兩天才看出來。

我有多個(gè)任務(wù)并發(fā),任務(wù)執(zhí)行完成后都有一個(gè)返回結(jié)果,我用一個(gè) List 將結(jié)果收集起來,等所有任務(wù)完成后,發(fā)送出去。結(jié)果一直 丟數(shù)據(jù)。

我反復(fù)檢查邏輯都沒有問題,最后恍然 List 是非線程安全的。

大家都知道 List 是非線程安全的,但是如果僅有 Add 操作呢?估計(jì)有些人就會(huì)認(rèn)為沒問題。

下面的代碼,期望輸出的結(jié)果是 1000,然而,注釋掉 lock 后,結(jié)果就不一樣了。

class Program
{
 static List<Person> persons;

 static void Main(string[] args)
 {
  persons = new List<Person>();

  object sync = new object();

  Parallel.For(0, 1000, (i) =>
  {
   Person person = new Person
   {
    ID = i,
    Name = "name" + i
   };
   lock (sync)
    persons.Add(person);
  });

  Console.WriteLine(persons.Count);
  Console.ReadLine();
 }

 class Person
 {
  public int ID { get; set; }
  public string Name { get; set; }
 }
}

利用安全集合ConcurrentBag取代list

測試程序

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace MyConcurrent
{
  class Program
  {
    /// <summary>
    /// ConcurrentBag并發(fā)安全集合
    /// </summary>
    public static void ConcurrentBagWithPallel()
    {
      ConcurrentBag<int> list = new ConcurrentBag<int>();
      Parallel.For(0, 10000, item =>
      {
        list.Add(item);
      });
      Console.WriteLine("ConcurrentBag's count is {0}", list.Count());
      int n = 0;
      foreach (int i in list)
      {
        if (n > 10)
          break;
        n++;
        Console.WriteLine("Item[{0}] = {1}", n, i);
      }
      Console.WriteLine("ConcurrentBag's max item is {0}", list.Max());
    }
    
 
    /// <summary>
    /// 函數(shù)入口
    /// </summary>
    /// <param name="args"></param>
    static void Main(string[] args)
    {
      Console.WriteLine("ConcurrentBagWithPallel is runing" );
      ConcurrentBagWithPallel();
 
      Console.Read();
    }

以上就是C# List 并發(fā)丟數(shù)據(jù)問題原因及解決方案的詳細(xì)內(nèi)容,更多關(guān)于C# List 并發(fā)丟數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • c#網(wǎng)絡(luò)喚醒功能實(shí)現(xiàn)

    c#網(wǎng)絡(luò)喚醒功能實(shí)現(xiàn)

    網(wǎng)絡(luò)喚醒實(shí)現(xiàn)了對(duì)網(wǎng)絡(luò)的集中管理,即在任何時(shí)刻,網(wǎng)管中心的IT管理人員可以經(jīng)由網(wǎng)絡(luò)遠(yuǎn)程喚醒一臺(tái)處于休眠或關(guān)機(jī)狀態(tài)的計(jì)算機(jī),下面使用c#實(shí)現(xiàn)網(wǎng)絡(luò)喚醒功能
    2014-01-01
  • Unity實(shí)現(xiàn)虛擬搖桿效果

    Unity實(shí)現(xiàn)虛擬搖桿效果

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)虛擬搖桿效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#針對(duì)xml文件轉(zhuǎn)化Dictionary的方法

    C#針對(duì)xml文件轉(zhuǎn)化Dictionary的方法

    這篇文章主要介紹了C#針對(duì)xml文件轉(zhuǎn)化Dictionary的方法,是C#操作XML文件的典型應(yīng)用,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01
  • C#異常處理總結(jié)及簡單實(shí)例

    C#異常處理總結(jié)及簡單實(shí)例

    這篇文章主要介紹了C#異常處理總結(jié)及簡單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • winform壁紙工具為圖片添加當(dāng)前月的日歷信息

    winform壁紙工具為圖片添加當(dāng)前月的日歷信息

    使用用winform做了一個(gè)設(shè)置壁紙小工具,為圖片添加當(dāng)月的日歷并設(shè)為壁紙,可以手動(dòng)/定時(shí)設(shè)置壁紙,最主要的特點(diǎn)是在圖片上生成當(dāng)前月的日歷信息,感興趣的你可以參考下
    2013-03-03
  • C#文件讀寫操作詳細(xì)操作指南

    C#文件讀寫操作詳細(xì)操作指南

    這篇文章主要給大家介紹了關(guān)于C#文件讀寫操作詳細(xì)操作指南,在后端開發(fā)中使用C#語言進(jìn)行文件操作是一個(gè)常見的任務(wù),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • 10分鐘學(xué)會(huì)VS NuGet包私有化部署

    10分鐘學(xué)會(huì)VS NuGet包私有化部署

    本文主要介紹了10分鐘學(xué)會(huì)VS NuGet包私有化部署,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C#中out與ref作用區(qū)別示例分析

    C#中out與ref作用區(qū)別示例分析

    這篇文章主要為大家介紹了C#中out與ref作用區(qū)別示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 詳解C# partial 關(guān)鍵字的使用

    詳解C# partial 關(guān)鍵字的使用

    局部類型允許我們將一個(gè)類、結(jié)構(gòu)或接口分成幾個(gè)部分,分別實(shí)現(xiàn)在幾個(gè)不同的.cs文件中。接下來通過本文給大家分享C# partial 關(guān)鍵字的使用,感興趣的的朋友一起看看吧
    2017-08-08
  • C#同步、異步遠(yuǎn)程下載文件實(shí)例

    C#同步、異步遠(yuǎn)程下載文件實(shí)例

    使用C#下載一個(gè)Internet上的文件主要是依靠HttpWebRequest/HttpWebResonse和WebClient。具體處理起來還有同步和異步兩種方式,所以我們其實(shí)有四種組合
    2014-04-04

最新評(píng)論

武冈市| 中江县| 堆龙德庆县| 聊城市| 阳春市| 门头沟区| 民权县| 札达县| 梁山县| 车致| 丰原市| 枣阳市| 莫力| 宁晋县| 奉贤区| 修武县| 余干县| 郑州市| 安徽省| 土默特右旗| 上栗县| 抚远县| 鸡泽县| 灵武市| 安塞县| 金秀| 耿马| 曲麻莱县| 通辽市| 雅安市| 弋阳县| 阜平县| 仲巴县| 年辖:市辖区| 江山市| 连南| 武汉市| 台东县| 那曲县| 临泉县| 四川省|